PHP JSON数据选择

时间:2010-10-14 00:22:30

标签: php json

如何从以下JSON中选择每个标题的数据? 我已经解码了JSON,但我不确定如何选择我想要的部分。

{
    "responseData": {
        "results": [
            {
                "title": "Justin Giesbrecht 749",
                "titleNoFormatting": "Justin Giesbrecht 749",
            },
            {
                "title": "Gopher dunes 09",
                "titleNoFormatting": "Gopher dunes 09",
            },
            {
                "title": "dirtbike Justin",
                "titleNoFormatting": "dirtbike Justin",
            },
            {
                "title": "A Warming",
                "titleNoFormatting": "A Warming",
            }
        ],
        "cursor": {
            "pages": [
                {
                    "start": "0",
                    "label": 1
                },
                {
                    "start": "4",
                    "label": 2
                }
            ],
            "estimatedResultCount": "6",
            "currentPageIndex": 0,
        }
    },
    "responseDetails": null,
    "responseStatus": 200
}

我认为会是这样的,但我什么都没得到:

echo "Response ". $jsonS->responseData->results[1]->title;

4 个答案:

答案 0 :(得分:5)

实际上你已经正确阅读了标题部分,这是无效的JSON。

将JSON复制到JSON验证器/ lint中,例如http://www.jsonlint.com/会在几个地方的最后一个对象属性之后显示你有额外的(逗号)(准确地说是5个位置,在每个'titleFormatting'属性之后和'currentPageIndex'之后)。< / p>

如果您修复了这些错误并使用json_decode解析它,例如:

$jsonS = json_decode($json_text);

然后你自己的代码:

echo "Response " . $jsonS->responseData->results[1]->title;

将输出第二个(索引1是第二个索引)结果标题

  

响应Gopher dunes 09

答案 1 :(得分:0)

当你对json_decode进行编码时,它会转换为常规的PHP数组,因此你可以像$ decodingObject [“nodeName”]一样引用它。

答案 2 :(得分:0)

当我使用PHP的json_decode方法引用它时解析JSON时,它会给我NULL,因为PHP认为它不是有效的JSON。添加var_dump($jsonS);以查看是否还发生了这种情况。如果是,您可能需要确保您的JSON有效。

这是我做的,供参考:

$json_data = <<<END_OF_JSON
{   
    "responseData": {        "results": [
            {
                "title": "Justin Giesbrecht 749",                "titleNoFormatting": "Justin Giesbrecht 749",
            },
            {
                "title": "Gopher dunes 09",
                "titleNoFormatting": "Gopher dunes 09",
            },
            {
                "title": "dirtbike Justin",
                "titleNoFormatting": "dirtbike Justin",
            },
            {
                "title": "A Warming",
                "titleNoFormatting": "A Warming",
            }
        ],
        "cursor": {
            "pages": [                {   
                    "start": "0",
                    "label": 1
                },
                {   
                    "start": "4",
                    "label": 2
                }
            ],
            "estimatedResultCount": "6",
            "currentPageIndex": 0,
        }
    },
    "responseDetails": null,
    "responseStatus": 200
}
END_OF_JSON;
$jsonS = json_decode($json_data);
var_dump($jsonS);
echo "Response ". $jsonS->responseData->results[1]->title;

输出结果为:

  

NULL响应

如果您使用不同的JSON,请编辑您的问题并分享。但如果您实际使用上述内容,则无效......

答案 3 :(得分:0)

在JSON中,不允许在数组/对象定义中留下尾随逗号。因此,在PHP中完全有效时写:

$a = array(1,2,3,);

(注意最后一个逗号),在JSON中

a : [1,2,3,] 

a : {x :'y',}

无效。