我试过这段代码
$jsonlogcontents='{"buildings":"townhall","Army":{ "Paladins":{ "325648":0, "546545":4 }, "Knights":{ "325648":-2, "546545":0 } } }';
$phpArray = json_decode($jsonlogcontents, false);
echo $phpArray->buildings;
echo $phpArray->Army;
这只是我的代码示例,JSON文件太大而无法包含并且包含敏感信息。我遇到的问题是我无法获得价值或打印
的价值$ phpArray->陆军
它给了我一个错误。然而,我可以打印或获得
的值$ phpArray->建筑物
我认为当您在PHP中解码JSON文件/内容时,您无法获取/打印/存储“'密钥”的值。其中包含更多信息(更多{和})或括号。您只能打印/获取价值仅包含1个值的关键值。
如果是这种情况,我该怎么做才能获得包含更多JSON代码的密钥的内容。另外,如何将包含更多JSON信息的密钥的内容转换为字符串?转换是这样我可以显示该键的值到页面或回显它
答案 0 :(得分:0)
当您将false
作为第二个参数添加到json_encode
时,它会将所有数组更新为sdClass
个空对象。这样您就可以将主数组作为对象< / p>
<?php
$json = '{
"buildings": "townhall",
"Army": {
"Paladins": {
"325648": 0,
"546545": 4
},
"Knights": {
"325648": -2,
"546545": 0
}
}
}';
$array = json_decode($json, true);
$object = (object)$array;
var_dump($object->Army);
?>
<强>输出强>
array(2) {
["Paladins"]=>
array(2) {
[325648]=>
int(0)
[546545]=>
int(4)
}
["Knights"]=>
array(2) {
[325648]=>
int(-2)
[546545]=>
int(0)
}
}
<强> Working Demo 强>
答案 1 :(得分:0)
错误是因为Army是一个对象,echo
不知道如何将其转换为字符串进行显示。使用:
print_r($phpArray->Army);
或:
var_dump($phpArray->Army);
查看其内容。
P.S。 $phpArray
不是数组而是对象。
对于陆军来说,我需要为此做另一个json_decode()。
你没有。 json_decode()
在一次调用中将整个结构解码为一个大对象(或数组)。无论数据的嵌套程度如何,您只需拨打json_decode()
一次即可完成。这就是为什么陆军不再是JSON字符串了。
答案 2 :(得分:-1)
这是因为json_decode的输出如下所示:
object(stdClass)(
'buildings' => 'townhall',
'Army' => object(stdClass)(
'Paladins' => object(stdClass)(
325648 => 0,
546545 => 4
),
'Knights' => object(stdClass)(
325648 => -2,
546545 => 0
)
)
)
陆军是一个标准物体,所以它不知道如何回应它。但是你可以var_dump它:
var_dump($phpArray->Army);
最简单的解决方案是将其视为普通数组:
$phpArray = json_decode($jsonlogcontents, true);