Как я могу украсить JSON программно?
Вы можете сказать, что это дубликат этого вопроса, но оригинальный вопрос там не был дан ответ. Важной частью вопроса является: programmatically
?
Есть ли функция PHP? Родной или самодельный?
6 ответов
Похоже, это может работать:
http://recursive-design.com/blog/2008/03/11/format-json-with-php/
результат генезиса:
[[["er",null,null,null,null,500],["e",2,null,null,57]],'45932b7d6d6dc08e']
в
[
[
[
"er",
null,
null,
null,
null,
500
],
[
"e",
2,
null,
null,
57
]
],
'45932b7d6d6dc08e'
]
У json_encode() есть флаг JSON_PRETTY_PRINT
echo json_encode($data, JSON_PRETTY_PRINT);
Я создал неразрушающий компонент JSON, который поддерживает несколько глубоких уровней.
/**
* JSON beautifier
*
* @param string The original JSON string
* @param string Return string
* @param string Tab string
* @return string
*/
function pretty_json($json, $ret= "\n", $ind="\t") {
$beauty_json = '';
$quote_state = FALSE;
$level = 0;
$json_length = strlen($json);
for ($i = 0; $i < $json_length; $i++)
{
$pre = '';
$suf = '';
switch ($json[$i])
{
case '"':
$quote_state = !$quote_state;
break;
case '[':
$level++;
break;
case ']':
$level--;
$pre = $ret;
$pre .= str_repeat($ind, $level);
break;
case '{':
if ($i - 1 >= 0 && $json[$i - 1] != ',')
{
$pre = $ret;
$pre .= str_repeat($ind, $level);
}
$level++;
$suf = $ret;
$suf .= str_repeat($ind, $level);
break;
case ':':
$suf = ' ';
break;
case ',':
if (!$quote_state)
{
$suf = $ret;
$suf .= str_repeat($ind, $level);
}
break;
case '}':
$level--;
case ']':
$pre = $ret;
$pre .= str_repeat($ind, $level);
break;
}
$beauty_json .= $pre.$json[$i].$suf;
}
return $beauty_json;
}
У меня был тот же вопрос прямо сейчас. Но, как и у вас, у меня php < 5.4. Zend Framework имеет Zend_Json::prettyPrint(). Работает очень хорошо.
Этот простой трюк помог мне, я не хотел никаких дополнительных библиотек или функций:
$json = '{"status":"0","status_translated":"Request successful!","data":"1"}';
$json_beautified = str_replace(array("{", "}", '","'), array("{<br /> ", "<br />}", '",<br /> "'), $json);
И результат выглядит так:
{
"status":"0",
"status_translated":"Request successful!",
"data":"1"
}
Это только для кода JSON, который идет на 1 шаг в глубину, я надеюсь, что это поможет.
Для использования в командной строке вы можете использовать js beautifier. Не нужно делиться своими данными с внешними сайтами.