我怎样才能parsing一个JSON文件与PHP?

我试图用PHPparsing一个JSON文件。 但是我现在卡住了。

这是我的JSON文件的内容:

{ "John": { "status":"Wait" }, "Jennifer": { "status":"Active" }, "James": { "status":"Active", "age":56, "count":10, "progress":0.0029857, "bad":0 } } 

这就是我迄今为止所尝试的:

 <?php $string = file_get_contents("/home/michael/test.json"); $json_a = json_decode($string, true); echo $json_a['John'][status]; echo $json_a['Jennifer'][status]; 

但是因为我不知道名称(比如'John''Jennifer' )以及所有可用的键和值(比如'age''count' ),我想我需要创build一些foreach循环。

我将不胜感激这个例子。

要遍历multidimensional array,可以使用RecursiveArrayIterator

 $jsonIterator = new RecursiveIteratorIterator( new RecursiveArrayIterator(json_decode($json, TRUE)), RecursiveIteratorIterator::SELF_FIRST); foreach ($jsonIterator as $key => $val) { if(is_array($val)) { echo "$key:\n"; } else { echo "$key => $val\n"; } } 

输出:

 John: status => Wait Jennifer: status => Active James: status => Active age => 56 count => 10 progress => 0.0029857 bad => 0 

在键盘上运行

我不能相信这么多人在没有正确阅读JSON的情况下发布答案。

如果你foreach遍历$json_a单独,你有一个对象的对象。 即使你作为第二个参数传入,你也有一个二维数组。 如果你正在循环第一维,你不能像这样回声第二维。 所以这是错误的:

 foreach ($json_a as $k => $v) { echo $k, ' : ', $v; } 

要回显每个人的状态,试试这个:

 <?php $string = file_get_contents("/home/michael/test.json"); $json_a = json_decode($string, true); foreach ($json_a as $person_name => $person_a) { echo $person_a['status']; } ?> 

最优雅的解决scheme:

 $shipments = json_decode(file_get_contents("shipments.js"), true); print_r($shipments); 

请记住,json文件必须以不含BOM的UTF-8编码。 如果文件有BOM,那么json_decode将返回NULL。

或者:

 $shipments = json_encode(json_decode(file_get_contents("shipments.js"), true)); echo $shipments; 

没有人指出你开始的“标签”是错的。 你用{}创build一个对象,而你可以用[]创build一个数组。

 [ // <-- Note that I changed this { "name" : "john", // And moved the name here. "status":"Wait" }, { "name" : "Jennifer", "status":"Active" }, { "name" : "James", "status":"Active", "age":56, "count":10, "progress":0.0029857, "bad":0 } ] // <-- And this. 

有了这个改变,json将被parsing为一个数组而不是一个对象。 而且用这个数组,你可以做任何你想要的,比如循环等

尝试

 <?php $string = file_get_contents("/home/michael/test.json"); $json_a=json_decode($string,true); foreach ($json_a as $key => $value){ echo $key . ':' . $value; } ?> 

尝试:

 $string = file_get_contents("/home/michael/test.json"); $json = json_decode($string, true); foreach ($json as $key => $value) { if (!is_array($value)) { echo $key . '=>' . $value . '<br />'; } else { foreach ($value as $key => $val) { echo $key . '=>' . $val . '<br />'; } } } 

使用foreach循环作为键值对循环浏览JSON。 进行types检查以确定是否需要执行更多的循环。

 foreach($json_a as $key => $value) { echo $key; if (gettype($value) == "object") { foreach ($value as $key => $value) { # and so on } } } 

尝试这个

 $json_data = '{ "John": { "status":"Wait" }, "Jennifer": { "status":"Active" }, "James": { "status":"Active", "age":56, "count":10, "progress":0.0029857, "bad":0 } }'; $decode_data = json_decode($json_data); foreach($decode_data as $key=>$value){ print_r($value); } 

更多标准答案:

 $jsondata = file_get_contents(PATH_TO_JSON_FILE."/jsonfile.json"); $array = json_decode($jsondata,true); foreach($array as $k=>$val): echo '<b>Name: '.$k.'</b></br>'; $keys = array_keys($val); foreach($keys as $key): echo '&nbsp;'.ucfirst($key).' = '.$val[$key].'</br>'; endforeach; endforeach; 

输出是:

 Name: John Status = Wait Name: Jennifer Status = Active Name: James Status = Active Age = 56 Count = 10 Progress = 0.0029857 Bad = 0 

尝试一下:

 foreach ($json_a as $key => $value) { echo $key, ' : '; foreach($value as $v) { echo $v." "; } } 

当你解码一个JSONstring时,你会得到一个对象。 不是一个数组。 所以看到你得到的结构的最好方法是做一个var_dump的解码。 (这个var_dump可以帮助你理解结构,主要是在复杂的情况下)。

 <?php $json = file_get_contents('/home/michael/test.json'); $json_a = json_decode($json); var_dump($json_a); // just to see the structure. It will help you for future cases echo "\n"; foreach($json_a as $row){ echo $row->status; echo "\n"; } ?> 

你必须这样给:

 echo $json_a['John']['status']; echo "<>" echo $json_a['Jennifer']['status']; br inside <> 

这给出了结果:

 wait active 
 $json_a = json_decode($string, TRUE); $json_o = json_decode($string); foreach($json_a as $person => $value) { foreach($value as $key => $personal) { echo $person. " with ".$key . " is ".$personal; echo "<br>"; } } 

回声所有JSON值的最快方法是使用循环,第一个循环将获得所有的对象,第二个值…

 foreach($data as $object) { foreach($object as $value) { echo $value; } }