【问题标题】:Parsing and echoing JSON with PHP使用 PHP 解析和回显 JSON
【发布时间】:2017-03-28 18:28:16
【问题描述】:

好吧,我在过去的 24 小时里都撞到了头,在测试和阅读 SO 之后无法弄清楚这一点。我有一个需要解析的 JSON 文件,由于某种原因,我无法获得正确的代码组合来回显除“数组”或“尝试获取非对象的属性”或“为 foreach 提供的参数无效”之外的任何内容( )”。这是我试图迭代的完整 JSON。我需要打印出每个“项目”的名称、每个项目中的“数据集”以及每个“数据集”的“权限”。我正在自己构建这个 JSON,所以我可以在必要时更改格式。

$data = json_decode($json, true);

在下面输出 JSON:

[
   [
      {
         "projects":[
            {
               "project":"test-project-1",
               "datasets":[
                  {
                     "dataset":"testing1",
                     "permissions":[
                        {
                           "role":"READER",
                           "google_group":"testing1@test.com"
                        }
                     ]
                  },
                  {
                     "dataset":"testing2",
                     "permissions":[
                        {
                           "role":"OWNER",
                           "google_group":"testing2@test.com"
                        }
                     ]
                  },
                  {
                     "dataset":"testing3",
                     "permissions":[
                        {
                           "role":"READER",
                           "google_group":"testing3@test.com"
                        }
                     ]
                  },
                  {
                     "dataset":"testing4",
                     "permissions":[
                        {
                           "role":"WRITER",
                           "google_group":"testing4@test.com"
                        }
                     ]
                  }
               ]
            },
            {
               "project":"test-project-2",
               "datasets":[
                  {
                     "dataset":"testing1",
                     "permissions":[
                        {
                           "role":"READER",
                           "google_group":"testing1@test.com"
                        }
                     ]
                  },
                  {
                     "dataset":"testing2",
                     "permissions":[
                        {
                           "role":"READER",
                           "google_group":"testing2@test.com"
                        }
                     ]
                  },
                  {
                     "dataset":"testing3",
                     "permissions":[
                        {
                           "role":"READER",
                           "google_group":"testing3@test.com"
                        }
                     ]
                  },
                  {
                     "dataset":"testing4",
                     "permissions":[
                        {
                           "role":"READER",
                           "google_group":"testing4@test.com"
                        }
                     ]
                  }
               ]
            }
         ]
      }
   ]
]

我尝试过类似的方法:

foreach($data->projects as $output)
{
    echo $output->project . "\n";
    foreach($output->datasets as $datasets)
    {
        echo $output->dataset . "\n";
    }
}

感谢您的帮助!

编辑:解析上述 JSON 的工作代码:

$projects = $json['projects'];
foreach ($projects as $project) {
    echo $project['project'] . "<br>";
    foreach ($json['projects'][0]['datasets'] as $datasets){
        echo $datasets['dataset'] . "<br>";
        foreach ($json['projects'][0]['datasets'][0]['permissions'] as $permissions){
            echo $permissions['role'] . "<br>";
            echo $permissions['google_group'] . "<br>";
        }
    }
}

【问题讨论】:

  • var_dump($output-&gt;dataset);

标签: php arrays json foreach echo


【解决方案1】:

您的 json 包含两个嵌套数组,其中包含您想要的对象。所以首先你可以使用[0][0] 之类的东西来获取包含项目的关联数组。

// ...
$projects = $json['projects'];
foreach ($projects as $project) {
    echo "Project: " . $project['project'] . "\n";
    foreach ($project['datasets'] as $dataset) {
        echo "Dataset: " . $dataset['dataset'];
        foreach ($dataset['permissions'][0] as $key => $value) {
            // ...
        }
    }
}

【讨论】:

  • 好的,菲利普,我到了某个地方,$projects = $json[0][0]['projects']; 没有工作,但$projects = $json['projects']; foreach ($projects as $project) { echo $project['project']; } 工作并成功打印了 2 个项目名称。然后我将如何继续打印数据集名称及其权限?
  • @user3282173 似乎,如果您不需要 [0][0] 部分,您在帖子中发布了错误的 json。但是 - 我更新了我的答案以读取权限和数据集
  • 谢谢菲利普,你把我引向了正确的方向。我发布了更新后的代码,该代码现在可以正常工作并按预期打印。感谢您的快速回复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
  • 2018-01-27
相关资源
最近更新 更多