我怎样才能将分配给smarty的json字符串打印成div?
我知道我可以在smarty中运行php函数,所以也许自定义函数可以工作吗?
提前感谢。
答案 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}