代码之家  ›  专栏  ›  技术社区  ›  Justin

PHP JSON数据选择

  •  1
  • Justin  · 技术社区  · 15 年前

    如何从下面的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 回复  |  直到 15 年前
        1
  •  5
  •   davur    15 年前

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

    将JSON复制到JSON验证器/lint中,例如 http://www.jsonlint.com/ 将显示您在最后一个对象属性后的几个位置(精确到5个位置,每个位置后 'titleFormatting' 属性和之后 'currentPageIndex' )

    如果修复这些错误并使用 json_decode 例如。:

    $jsonS = json_decode($json_text);
    

    然后你自己的代码:

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

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

    响应戈弗沙丘09

        2
  •  0
  •   Karl    15 年前

    当您对某个东西进行JSON解码时,它将转换为常规的PHP数组,因此您可以像$decodebject[“nodename”]那样引用它。

        3
  •  0
  •   Josh Andreas Rehm    15 年前

    当我分析你用php引用的json时 json_decode 方法,它给了我空值,因为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;
    

    结果是:

    零响应

    如果您使用的是不同的JSON,请编辑并共享您的问题。但是如果你真的在使用上面的内容,它是无效的…

        4
  •  0
  •   ts.    15 年前

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

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

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

    a : [1,2,3,] 
    

    a : {x :'y',}
    

    无效。

    推荐文章