Php Json解析错误

Php Json解析错误,php,json,Php,Json,我有下面的JSON和PHP,我有错误,我看不出我做错了什么 错误 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 Warni

我有下面的JSON和PHP,我有错误,我看不出我做错了什么

错误

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;
}

apr
是一个对象数组,因此根据您提供给我们的
JSON
,无法使用
->
访问。看起来你想进入所有的区域。要做到这一点,您需要使用以下内容在数组中循环:

foreach ($jfo->apr as $object) {
    print_r($object->zones);
}
要直接访问它们(因为您没有键,而且它是一个索引数组),您需要执行
$jfo->apr[$key]
,其中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" } } }

假设第7行是
$title=$jfo->apr->f1
显然,
$jfo
不包含您认为它所包含的内容。如果没有您提供的更多信息,即您在验证之前做了哪些工作,那么没有人能够真正帮助您。