我试图做一些我以前做过很多次的事情(使用PHP访问JSON文件中的对象)并且由于某种原因function args(){
$arg_nums = func_num_args();
$sum = 0;
for($i = 0 ; $i < $arg_nums; $i++)
$sum += func_get_arg($i);
return $sum;
}
echo args(1,2,3,4,5); // returns 15;
echo args(12,12); // returns 24
只返回JSON数组中的最后一项。这是JSON:
json_decode
PHP:
{
"person": {
"lname": "smith",
"fname": "bob"
},
"person": {
"lname": "jones",
"fname": "jane"
}
}
结果只是数组中的最后一项:
<?php
//access and dump
$json = file_get_contents('people.json');
$filey = json_decode($json, true);
var_dump($filey);
?>
使用array (size=1)
'person' =>
array (size=2)
'lname' => string 'jones' (length=5)
'fname' => string 'jane' (length=4)
不会返回错误,我根据jsonlint有效。我加载页面时也没有发现任何控制台错误。
我完全难过,无法看到与之前我做过的事情有什么不同 - 有人能说出我在这里失踪了吗?
答案 0 :(得分:2)
那是因为你的json对象在json数组中的名字“person”是相似的,所以json decode将覆盖最新的值。 考虑像
这样的东西{
"person1": {
"lname": "smith",
"fname": "bob"
},
"person2": {
"lname": "jones",
"fname": "jane"
}
}
您的代码将正常运行。
答案 1 :(得分:1)
[
{
"lname": "Dawes",
"fname": "April"
},
{
"lname": "Colin",
"fname": "Dick"
}
]
我在设计JSON时使用的一个技巧是构建一个示例PHP数组,其形状我想要json_decode
给我,编码该数组并将结果输出到屏幕。所以我上面发布的是:
$arr = [
['lname'=>'Dawes','fname'=>'April'],['lname'=>'Colin','fname'=>'Dick'],
];
$json = json_encode($arr);
echo $json;
由于我通过编码具有我想要的形状的数组来构建JSON,所以我可以确信即使我的数据发生变化,json_decode($json,true)
也会给出我期望的数组形状。
快乐的编码。
答案 2 :(得分:0)
当你使用json_decode(true)
时,你的json现在是一个数组。
您不能有两个相同的数组键,在本例中为“person”。
如果您仍想使用json_decode(true)
,请将“person”更改为“person1”左右。
同时尝试var_dump($filey)
和var_dump($json)
,您会看到我在说什么。