我一直在研究json解码问题(我已经得到了非常感谢的帮助 - PHP json_decode brings back null)。 但我发现我有另一个问题,让json解码带回的assoc数组正常工作。我做错了什么还是数组?这是我的代码
<?php
$jsonurl='http://www.foxsports.com.au/internal-syndication/json/livescoreboard';
$json = file_get_contents($jsonurl,0,null,null);
$json = str_replace("jQuery.fs['scoreboard'].data =","",$json); /*
replace starting comment*/
$json =strip_tags($json); /* takes out html tags & comments*/
$json_output = json_decode($json,true);
switch(json_last_error()) {
case JSON_ERROR_DEPTH:
echo ' - Maximum stack depth exceeded';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' - Unexpected control character found';
break;
case JSON_ERROR_SYNTAX:
echo ' - Syntax error, malformed JSON';
break;
case JSON_ERROR_NONE:
// echo ' - No errors';
break; }
function crttbl($test){ echo "</br></br>";
echo "<table border='1'>";
foreach($test as $key=>$row) {
echo "<tr>";
foreach($row as $key2=>$row2){
echo "<td>". $key2.": " .$row2 . "</td>";
}
echo "</tr>";
} echo "</table>";
echo "</br></br>"; }
//print_r (array_keys($json_output)); $test=$json_output["response"];
print_r(array_keys($test)); crttbl($test);
echo var_dump($test);
$test=$test['container-1']; print_r(array_keys($test)); crttbl($test);
echo var_dump($test);
$test=$test['group-content-1']; print_r(array_keys($test));
crttbl($test);
答案 0 :(得分:0)
如果这是你想要的输出 http://cl.ly/0t2a2y3r2k2Q0B2x1o2h
然后试试这个:
function createTable(&$node, &$output, $key = NULL, $indent = 0) {
if ($indent > 0) {
$output .= "<tr>\n";
$output .= "<td><strong>". $key."</strong></td>";
} else {
$output .= '<tr><td>Top Level</td>';
}
if (is_object($node) || is_array($node)) {
$node = (array)$node;
$output .= "</tr>\n";
$count = 0;
foreach ($node as $k=>$v) {
createTable($node[$k], $output, $k, $indent + 1);
}
} else {
$output .= "<td>".($node === TRUE ? 1 : $node === FALSE ? 0 : $node) ."</td>";
$output .= "</tr>\n";
}
}
function outputTable($object) {
echo "<table border='1'>";
$output = "";
createTable($object, $output);
echo $output;
echo "</table>";
}
outputTable($json_output);
原始代码的问题在于您的对象嵌套了两个以上级别,因此当您执行foreach($row as $key2=>$row2) {
时,$ row2实际上是一个数组,您只需在输出中输入单词Array
。
由于你无法100%肯定(至少我认为你不能)响应的深度级别,你最好使用像我提供的递归函数。