JSON DECODE Assoc Array

时间:2012-03-25 06:53:21

标签: php json

我一直在研究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);

1 个答案:

答案 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%肯定(至少我认为你不能)响应的深度级别,你最好使用像我提供的递归函数。