相当聪明的打印json对象

时间:2012-01-05 11:59:24

标签: php json smarty

我怎样才能将分配给smarty的json字符串打印成div?

我知道我可以在smarty中运行php函数,所以也许自定义函数可以工作吗?

提前感谢。

3 个答案:

答案 0 :(得分:2)

最简单的方法是将对象转换为关联数组,然后解析它。该功能如下所示:

function format_json($array, $indent) {

    $indent_text = '';

    for ($ii = 0;$ii < $indent; $ii++)
        $indent_text .= '    ';

    echo '<br />'.$indent_text.'{<br />';

    foreach ($array as $key => $value) {
        echo $indent_text.'"'.$key.'" : '; 
        if (is_array($value))
            format_json( $value, $indent + 1 );
        else echo '"'.$value.'"; <br />';
    }
    echo $indent_text.'}<br />';
}

<pre><code><?php format_json(json_decode($your_json_object, true), 0); ?></code></pre>

显然,您可以设置标记的样式并以您想要的任何方式更改缩进。

答案 1 :(得分:1)

我知道这是一个老问题,但是我使用的是可以很容易地将其变成函数,或者只是内联运行:

<pre>
{$JSON_PRETTY_PRINT = 128}
{json_encode($some_json_object, $JSON_PRETTY_PRINT)}
</pre>

所以在实践中,它可能看起来像这样。

{$data = json_decode('{}',1)}
{$data.some_string = 'abc'}
{$data.some_number = 1}
{$data.some_array = ["1","2","3"]}
{$data.some_obj = json_decode('{}',1)}
{$data.some_obj.foo = "bar"}}
{$data.some_array = ["1","2","3"]}
<pre>
{$JSON_PRETTY_PRINT = 128}
{json_encode($data, $JSON_PRETTY_PRINT)}
</pre>

哪个会输出:

{
    "some_string": "abc",
    "some_number": 1,
    "some_array": [
        "1",
        "2",
        "3"
    ],
    "some_obj": {
        "foo": "bar"
    }
}

答案 2 :(得分:0)

谢谢我离开这里,我写的功能归功于A.M。;

function smarty_function_pretty_format_json($params, $smarty)
{
  //$array // $indent

  $array = json_decode($params['json'], true);

 $indent_text = '';

    for ($ii = 0;$ii < $params['indent']; $ii++)
        $indent_text .= '    ';

    echo '<br />'.$indent_text.'{<br />';

    foreach ($array as $key => $value) {
        echo $indent_text.'"'.$key.'" : '; 
        if (is_array($value))
            format_json( $value, $indent + 1 );
        else echo '"'.$value.'"; <br />';
    }
    echo $indent_text.'}<br />';
}

用法:

{pretty_format_json json=$json_object indent=0}