使用PHP解析嵌套JSON

时间:2017-03-13 06:40:17

标签: php json parsing foreach

我为此找到了解决方案的高低,但却找不到任何我正在遇到的东西。我使用php来解析嵌套的JSON响应,这种响应很难提取特定的字段。

这里有一些JSON:

{
    "collection":{
    "items":[
        {
            "href":"https://api.teamsnap.com/v3/members/MEMBERID",
            "data":[
                "name":"id",
                "value": 0000000 // MEMBERID
            },
            {
                "name":"type",
                "value":"member"
            },
            {
               "name":"address_city",
               "value":""
            },
            {
               "name":"address_state",
               "value":""
            },

这是我的php:

$json = file_get_contents($url, false, $context);

$result = json_decode($json);
foreach ($result->collection->items as $items=>$val) {
    foreach ($val->data as $data=>$datasets) {
        foreach ($datasets as $dataset=>$val) {
            echo $dataset.': '.$val;
            echo "<br>";  
        }
    }
};

这是当前输出的一点:

name: id
value: MEMBERID
name: first_name
value: MEMBERNAME
name: last_name
value: MEMBERNAME

我想要做的是能够使用他们的名字和姓氏列出此回复中的所有成员。我尝试过使用$ val-&gt; first_name,$ val [&#39; first_name&#39;];这样但都会导致foreach错误。

1 个答案:

答案 0 :(得分:2)

如果您可以确保每个data成员都有namevalue字段,您可以使用类似的内容并跳过for循环:

$json = file_get_contents($url, false, $context);

$result = json_decode($json);
foreach ($result->collection->items as $itemKey => $val) {
    $data = array();
    foreach ($val->data as $dataKey => $dataset) {
        $data[$dataset->name] = $dataset->value;
    }
    var_dump($data);
};

虽然你应该先检查$result->collection$result->collection->items然后再循环它们以避免错误。