【问题标题】:JSON DECODE Assoc Array [closed]JSON DECODE Assoc 数组 [关闭]
【发布时间】:2012-03-25 06:53:21
【问题描述】:

我一直在处理 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);

【问题讨论】:

  • 究竟是什么问题?
  • 投票结束,因为过于本地化。正如文案所说:“这个问题不太可能帮助任何未来的访客”。将来,至少包括对您遇到的问题的描述,并尝试只发布重新创建它所需的最少代码量。
  • 糟糕,你忘了说明实际的问题是什么:(
  • 快速提示:StackOverflow 和类似的网站不能替代您自己进行调试。这里的问题需要证明解决问题的彻底性 - 它有助于鼓励初学者也成为更好的程序员。

标签: php json


【解决方案1】:

如果这是你想要的输出 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=&gt;$row2) { 时,$row2 实际上是一个数组,您只需在输出中得到单词Array

由于您无法 100% 确定(至少我认为您不能)响应的深度级别数,因此您最好使用我提供的递归函数。

【讨论】:

  • sberry - 感谢您的回复。这就是我需要知道的。这是我第一次尝试解码 json。关于递归的问题对我来说是新的。
猜你喜欢
  • 2016-08-06
  • 1970-01-01
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多