解析JSON提要

时间:2015-09-22 19:01:34

标签: php json parsing feed

我无法检索"姓名"" att"," cmp"和" yds"在这个NFL游戏中心JSON提要。使用PHP。

如何在没有硬编码的情况下检索这些值" 2015091700"和" 00-0023436"?

http://www.nfl.com/liveupdate/game-center/2015091700/2015091700_gtd.json

{  
"2015091700":{  
  "home":{  
     "stats":{  
        "passing":{  
           "00-0023436":{  
              "name":"A.Smith",
              "att":25,
              "cmp":16,
              "yds":191
           }
        }
     }
  }
 }
}

这是我现在的代码。

$url  = file_get_contents("http://www.nfl.com/liveupdate/game-center/2015091700/2015091700_gtd.json");
$json = json_decode($url, true); // 'true' makes data an array
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($json)); 
$player = array();

foreach($iterator as $key=>$value) {
  $player[$key] = $value;
  echo $player['name'];
}

这接近我的需要。但是,该页面吐出:

A.Smith 
A.Smith
A.Smith
A.Smith
A.Smith
A.Smith
A.Smith
A.Smith
J.Charles
J.Charles
J.Charles
J.Charles
J.Charles
J.Charles
J.Charles
J.Charles
A.Smith
A.Smith
A.Smith
A.Smith
A.Smith

我不确定为什么我会得到重复的值。如何使这反映出JSON Feed的内容?我非常希望创建一个可以插入MySQL数据库表的查询字符串。

3 个答案:

答案 0 :(得分:6)

这样做的一种方法是使用PHP的RecursiveIteratorIterator类,它允许您遍历任何其他迭代器类和RecursiveArrayIterator类,它允许轻松迭代数组。这些是PHP SPL Library的一部分。您可以像这样使用它:

<?php
$data = '{
"2015091700":{  
  "home":{  
     "stats":{  
        "passing":{  
           "00-0023436":{  
              "name":"A.Smith",
              "att":25,
              "cmp":16,
              "yds":191
           }
        }
     }
  }
 }
}';

$json = json_decode($data, true); // 'true' makes data an array

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($json)); 

foreach($iterator as $key=>$value) {
    echo $key .' '. $value . '<br />';
}

?>

结果是:

name A.Smith
att 25
cmp 16
yds 191

EXAMPLE

如果您希望将各个位变为变量,则最简单的方法是对代码进行少量更改:

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($json)); 

$player = array();

foreach($iterator as $key=>$value) {
    $player[$key] = $value;

}
echo $player['name'];

这允许您描述播放器并将键正确分配给播放器。上述结果将是:

A.Smith

现在您可以根据需要使用播放器数据的各个部分,因为它们可以通过按键轻松识别。

答案 1 :(得分:1)

将JSON解码为关联数组,然后使用foreach将其循环。

$data = json_decode($json, true);
foreach($data as $key=>$val){
    // $key = 2015091700
    // $val = an associative array with one row.
    // ['home' => ... ]
}

答案 2 :(得分:0)

这有帮助吗?

$decoded = json_decode($json,true);
var_dump($decoded['2015091700']);