作为以下字符串,使用 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);