从包含数组值的字符串转换 JSON


convert JSON from string with array value included

作为以下字符串,使用 json_decode 将其转换为数组。但是,转换后,TbManager:userAccesses[]的值仍然是字符串。

TbManager:userAccesses[]可以通过再次调用json_decode来转换为数组,json_decode($json['TbManager:userAccesses[]'] ),但是如何在第一次json_decode调用中转换它呢?

$json = '{
"TbUser:username":"admin",
"TbManager:userAccesses[]":"['"1'",'"8'"]"
}'
// converted to JSON with 'TbManager:userAccesses[]':string
// how to conver TbManager:userAccesses[] as array type
$json = json_decode($json)
"TbManager:userAccesses[]":"['"1'",'"8'"]"

在那里,这是一个单一值"['"1'",'"8'"]"根据 JSON 语法它不是数组,因此您会看到输出。

数组将是当值类似于

$json = '{
"TbUser:username":"admin",
"TbManager:userAccesses":[1,8]
}';
这是因为

您的 JSON 数据格式不正确。JSON 数据的正确格式:

{"TbUser:username":"admin","TbManager:userAccesses[]":[1,8]}

在您的代码中,它将是:

$json = '{
"TbUser:username":"admin",
"TbManager:userAccesses[]":[1,8]
}';

然后:

var_dump($json);

将输出:

object(stdClass)#1 (2) {
  ["TbUser:username"] => string(5) "admin"
  ["TbManager:userAccesses[]"] => array(2) {
    [0] => int(1)
    [1] => int(8)
  }
}

您的$json应该看起来像

{"TbUser:username":"admin","TbManager:userAccesses[]":[1,8]}"

在这种情况下,'TbManager:userAccesses[]' 将在 json_decode 之后成为数组

如上所述,它不是一个有效的 json 字符串,但如果这就是你得到的,这里有一个片段可以将这些值转换为数组:

$json = '{
    "TbUser:username":"admin",
    "TbManager:userAccesses[]":"['"1'",'"8'"]"
}';
$json = json_decode($json);
array_walk_recursive($json, function (&$item, $key)
{
    if (substr($key, -2) == '[]') {
        $item = json_decode($item);  
    }
});
print_r($json);