这是有效的JSON吗?如果是,那么我该如何访问节点

时间:2012-11-30 12:28:53

标签: php json parsing

阅读了我能找到的所有文章后,我想知道json数据是否有效。

我正在使用php发出此请求:

$myjson= file_get_contents('http://slhassall.rightboatexpert.com/api/boats');
 var_dump(json_decode($myjson));

并将此转储到页面,是否有效json?

object(stdClass)[1]

  public 'pagination' =>

    object(stdClass)[2]

      public 'total' => int 32

      public 'num_per_page' => int 25

      public 'page' => int 1

  public 'results' => 

    array (size=25)

      0 => 

        object(stdClass)[3]

          public 'id' => int 54

          public 'manufacturer' => string 'Utrecht' (length=7)

          public 'condition' => string 'used' (length=4)

          public 'model' => string 'Iron Sailing Barge' (length=18)

          public 'marketing_status' => string 'For Sale' (length=8)

          public 'year' => null

          public 'stock_number' => null

          public 'location' => string 'Suffolk' (length=7)

          public 'description' => string 'Clipper design. Built in Utrecht 1988, 25m in

length, an elegantly converted Dutch sailing barge with fantastic internal and external

 social entertainment /display spaces. Suitable for corporate or pri' (length=201)

          public 'sale_status' => string 'For Sale' (length=8)

          public 'price' => int 149000

          public 'currency' => string 'GBP' (length=3)

          public 'thumbnail' => string '/api/images/262' (length=15)

          public 'boat_image_id' => int 262

      1 => 

        object(stdClass)[4]

          public 'id' => int 51

          public 'manufacturer' => string ' Wood' (length=5)

          public 'condition' => string 'used' (length=4)

          public 'model' => string 'MFV/Guard vessel ' (length=17)

          public 'marketing_status' => string 'For Sale' (length=8)

          public 'year' => int 1959

          public 'stock_number' => null

          public 'location' => string 'Great Yarmouth, Norfolk UK' (length=26)

          public 'description' => string '' (length=0)

          public 'sale_status' => string 'For Sale' (length=8)

          public 'price' => int 35000

          public 'currency' => string 'GBP' (length=3)

          public 'thumbnail' => string '/api/images/219' (length=15)

          public 'boat_image_id' => int 219

      2 => 

我问,因为当我尝试连接节点时:

 $array = (json_decode($myjson));
    echo $array->boat->manufacturer;

我收到此错误:

注意:未定义的属性:第6行的C:\ wamp \ www \ json \ index.php中的stdClass :: $ boat

注意:尝试在第6行的C:\ wamp \ www \ json \ index.php中获取非对象的属性

第6行是echo语句。 我用Google搜索了这些错误代码,但无法弄明白。

任何帮助都将不胜感激。

由于

2 个答案:

答案 0 :(得分:1)

您的JSON有效,因为无效的JSON会导致返回NULLhttp://php.net/manual/en/function.json-decode.php
虽然我建议您在调用json_decode后进行检查,以便您知道以后访问该对象时发生了什么,并发现您正在访问非对象的属性(即NULL

您收到错误是因为您的对象没有这样的结构 - 正如您的var_dump告诉您的那样,结果对象中没有属性boat

var_dump开始,表示该对象有两个属性paginationresults。在 results有一个包含25个项目的数组。在每个项目中都有一个对象具有属性idmanufacturercondition等等。

而且,确实你的问题不包含JSON,php var_dump没有给你一个JSON ......

我不确定你想做什么。我想你想打印每艘船的所有制造商,所以...(未经测试)

$object = json_decode($myjson);
if ($object == null) {
    // json is invalid, or $myjson actually contains NULL
} else {
    $array = $object->results;

    foreach ($array as $item) {
        echo $item->manufacturer;
    }
}

答案 1 :(得分:0)

此JSON有效,但您尝试访问不在根目录中的项目。 返回的对象在根中有“facet”,“pagination”和“results”但没有“boat”

以下是我用safari解析后得到的内容:

Screenshot of the json parsed under safari