Довольно распечатать JSON объект в Smarty - PullRequest
0 голосов
/ 05 января 2012

Как мне довольно просто распечатать в div строку json, назначенную smarty?

я знаю, что могу запускать функции php в smarty, так что, может быть, подойдет пользовательская функция?

спасибо заранее.

Ответы [ 3 ]

2 голосов
/ 05 января 2012

Самое простое, что нужно сделать, - преобразовать объект в ассоциативный массив и затем проанализировать его.Функция будет выглядеть следующим образом:

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); ?>

Очевидно, вы можете стилизовать тег и изменить отступы любым удобным вам способом.

1 голос
/ 25 января 2018

Я знаю, что это старый вопрос, но вот то, что я использую, которое можно довольно легко превратить в функцию или просто запустить inline:

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

Так что на практике, это может выглядеть примерно так:

<code>{$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)}

Что бы вывести:

{
    "some_string": "abc",
    "some_number": 1,
    "some_array": [
        "1",
        "2",
        "3"
    ],
    "some_obj": {
        "foo": "bar"
    }
}
0 голосов
/ 06 января 2012

Спасибо, я оставляю здесь функцию, которую я написал благодаря AM;

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}
...