2015-09-05 187 views
-1

我有以下JSON和PHP和我是我得到的错误,我看不出有什么我做错了JSON解析错误

错误

Notice: Trying to get property of non-object in C:\Users\tom.AD\PhpstormProjects\SYS\index.php on line 7 

Notice: Trying to get property of non-object in C:\Users\tom.AD\PhpstormProjects\SYS\index.php on line 9 

Warning: Invalid argument supplied for foreach() in C:\Users\tom.AD\PhpstormProjects\SYS\index.php on line 11 

JSON

{ 
    "apr": [ 
    { 
     "f1": "139eg1", 
     "zones": [ 
     { 
      "f2": "unknown", 
      "zone": "123" 
     }, 
     { 
      "f2": "unknown", 
      "zone": "321" 
     }, 
     { 
      "f2": "unknown", 
      "zone": "123" 
     }, 
     { 
      "f2": "top", 
      "zone": "321" 
     }, 
     { 
      "f2": "unknown", 
      "zone": "123" 
     } 
     ] 
    }, 
    { 
     "f1": "139eg2", 
     "zones": [ 
     { 
      "f2": "unknown", 
      "zone": "123" 
     }, 
     { 
      "f2": "unknown", 
      "zone": "321" 
     }, 
     { 
      "f2": "unknown", 
      "zone": "123" 
     }, 
     { 
      "f2": "top", 
      "zone": "321" 
     }, 
     { 
      "f2": "unknown", 
      "zone": "123" 
     } 
     ] 
    }, 
    { 
     "f1": "139eg3", 
     "zones": [ 
     { 
      "f2": "unknown", 
      "zone": "123" 
     }, 
     { 
      "f2": "unknown", 
      "zone": "321" 
     }, 
     { 
      "f2": "unknown", 
      "zone": "123" 
     }, 
     { 
      "f2": "top", 
      "zone": "321" 
     }, 
     { 
      "f2": "unknown", 
      "zone": "123" 
     } 
     ] 
    } 
    ] 
} 

PHP

$json_file = file_get_contents('json/posts.json'); 

$jfo = json_decode($json_file); 

$title = $jfo->apr->f1; 

$posts = $jfo->apr->zones; 

foreach ($posts as $post) { 
    echo $post->zone; 
} 
+0

假设第7行是'$ title = $ jfo-> apr-> f1;'那么显然'$ jfo'不包含您认为它的作用。如果没有更多的信息,也就是说你做了什么来验证那些事情,没有人能真正帮助你。 –

回答

1

apr是一组对象,因此根据您提供给我们的JSON不能使用->进行访问。看来你想访问所有的区域。要做到这一点,你需要遍历数组的东西,如:

foreach ($jfo->apr as $object) { 
    print_r($object->zones); 
} 

要直接访问它们(因为你没有钥匙,这是一个索引数组),你需要做的$jfo->apr[$key],其中关键是一些数字值,它是数组$jfo->apr中的现有索引。例如:

$first_zone_array = $jfo->apr[0]; //This gets the following: 
object(stdClass)#2 (2) { ["f1"]=> string(6) "139eg1" ["zones"]=> array(5) { [0]=> object(stdClass)#3 (2) { ["f2"]=> string(7) "unknown" ["zone"]=> string(3) "123" } [1]=> object(stdClass)#4 (2) { ["f2"]=> string(7) "unknown" ["zone"]=> string(3) "321" } [2]=> object(stdClass)#5 (2) { ["f2"]=> string(7) "unknown" ["zone"]=> string(3) "123" } [3]=> object(stdClass)#6 (2) { ["f2"]=> string(3) "top" ["zone"]=> string(3) "321" } [4]=> object(stdClass)#7 (2) { ["f2"]=> string(7) "unknown" ["zone"]=> string(3) "123" } } }