以有意义的方式打印出大型JSON_DECODE对象?

时间:2014-05-02 21:35:51

标签: php json foreach

我正在一个网站上工作,我大量使用json对象。我有一个非常非常大的json对象,从它看起来像包含数十个数组的数组数组...

我一直在做正常的做法:

$obj = json_decode($json,true);
if( $obj == NULL )
    echo "JSON NULL!<br>";
else{                                                                            

    echo "here!!<br>";
    foreach( $obj as $key=>$val ){
        foreach( $val as $k=>$v){

            echo "$k <br>";
        }
    }
}

但输出结果不是很有意义,我发现很难说出能够以$obj["one"]["two"]["three]"方式访问各个项目的内容是什么。

我已经看了很多,并且在foreach数组中有很多使用json_decode的例子,但是我发现的所有例子都是目标单深度数组。有没有人知道以一种方式输出内容的方法,这种方式可以更容易地分辨包含什么内容?

理想情况下,标签是最具视觉可理解性的东西。

谢谢!


编辑:感谢您的快速回复!我不知道这些标签。我希望我可以选择所有这些作为&#34;最佳答案&#34;!

4 个答案:

答案 0 :(得分:4)

$obj = json_decode($json,true);
echo "<pre>".htmlspecialchars(print_r($obj,TRUE))."</pre>\n";

答案 1 :(得分:2)

我同意。这可能看起来不错

 $obj = json_decode($json,true);

 echo "<pre>";
 print_r( $obj );
 echo " </pre>";

这也是缩进。

答案 2 :(得分:2)

我建议像:

$obj = json_decode($json, true);
echo '<pre>';
echo print_r($obj, true);
echo '</pre>';

答案 3 :(得分:0)

我猜你有问题,不知道你有多少级别的数组。 你可以这样做一个递归函数:

function echoarray($obj, $i = 0){
    foreach($obj as $key => $val){
        if(isarray($val)) echoarray($val, $i++);
        else echo "$i - $key: $val <br/>";
    }
}

而不是原来的foreach。变量$i可以告诉您当前的等级。 如果它符合您的需要,请将其作为完成的代码,但作为一个概念。

基本上,如果当前$val是数组,则会一次又一次地调用函数echoarray,直到$val不再是数组。