使用php循环访问JSON,并写入它。输出为空

时间:2012-11-18 21:09:42

标签: php json

我的目标是循环遍历JSON中的每个Item,并为每个“Item”添加一个名为“modal”的附加键,并将该值与包含html的键配对。我在下面删除了我的代码。

我能够为每个'Item'添加'modal',但是以某种方式将值设置为null,而不是我想要的html。

JSON文件:

{"Item":{
"thumbnail":"http://...",
  "title": "Item title"
},
"Item":{
  "thumbnail":"http://...",
  "title": "Item title"
}}        

PHP:

$json_a=json_decode($json, true);

foreach ($json_a['Item'] as &$obj){
    $out = '<img src=\"' . $obj['thumbnail'] . '\">';
    $out .= '<span>' . $obj['title'] . '</span>';

    $obj['modal'] = $out; //value of $out doesn't get passed in, instead the value becomes null.
}

$json_a=json_encode($json_a);
print_r($json_a);

json输出:

...{'modal': null}... 

编辑JSON有效。它来自亚马逊的产品API,我为此示例缩短了它并使其无效。

2 个答案:

答案 0 :(得分:3)

您的JSON无效。它是具有重复键的对象(“Item”)。您应该使用数组:

[
    {
        "thumbnail": "...",
        "title": "..."
    },
    {
        "thumbnail": "...",
        "title": "..."
    }
]

然后你可以迭代它并为所有元素添加'modal':

$json_a = json_decode($json, true);

foreach ($json_a as &$obj) {
    $out = '<img src=\"' . $obj['thumbnail'] . '\">';
    $out .= '<span>' . $obj['title'] . '</span>';

    $obj['modal'] = $out;
}

$json_a = json_encode($json_a);
print_r($json_a);

答案 1 :(得分:1)

简单的json无效

{
    "Item": {
        "thumbnail": "http://...",
        "title": "Item title",
                             ^---- This should not be here

    },

    "Item": {
       ^-------------- Duplicate name 
        "thumbnail": "http://...",
        "title": "Item title",
                             ^---- This should not be here

    }
}

主要问题是,如果您使用PHP进行生成,则需要使用json_encode正确生成对象或数组