PHP仅返回最后一个JSON对象

时间:2016-07-27 04:33:30

标签: php json

我试图做一些我以前做过很多次的事情(使用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有效。我加载页面时也没有发现任何控制台错误。

我完全难过,无法看到与之前我做过的事情有什么不同 - 有人能说出我在这里失踪了吗?

3 个答案:

答案 0 :(得分:2)

那是因为你的json对象在json数组中的名字“person”是相似的,所以json decode将覆盖最新的值。 考虑像

这样的东西
{
  "person1": {
    "lname": "smith",
    "fname": "bob"
  },
  "person2": {
    "lname": "jones",
    "fname": "jane"
  }
}

您的代码将正常运行。

答案 1 :(得分:1)

Marcatectura,我知道你已经接受了建议使用不同对象键的答案,但我认为你应该知道。如果你想在PHP中使用数组,你甚至不需要对象名。以下JSON将执行:

[
    {
        "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),您会看到我在说什么。