0

阅读了我能找到的所有文章后,我想知道 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 语句。我用谷歌搜索了这些错误代码,但无法弄清楚。

任何帮助,将不胜感激。

谢谢

4

2 回答 2

1

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

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

从您的var_dump,这意味着该对象有两个属性paginationresults。其中 results有一个包含 25 个项目的数组。在每个项目中都有一个具有属性idmanufacturer等的对象condition

而且,确实你的问题不包含 JSON,phpvar_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;
    }
}
于 2012-11-30T12:33:36.077 回答
0

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

这是我用 safari 解析的结果:

safari下解析的json截图

于 2012-11-30T12:35:00.967 回答