2015-09-05 176 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" } } }