Читаемый человеком JSON: он же Добавляет пробелы и разрывы в дамп json
Есть ли где-нибудь "простой" скрипт, который возьмет данные json и отформатирует их, чтобы сделать более удобочитаемыми?
Например:
// $response is a json encoded string.
var_dump($response);
Приведенное выше выводит все в одной строке. Я бы хотел, чтобы в нем были отступы и интервалы, чтобы его было легче читать.
6 answers
json_encode($response, JSON_PRETTY_PRINT);
Сейчас 2017 год, и я думаю, что это должно быть ответом для всех, кто работает с современной версией PHP.
Обратите внимание, что существует множество вариантов кодирования строки JSON по вашему вкусу. Из php.net :
JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_PRESERVE_ZERO_FRACTION, JSON_UNESCAPED_UNICODE, JSON_PARTIAL_OUTPUT_ON_ERROR
Обратите внимание, что var_dump
и его двоюродный брат-терсер var_export
выполните печать новых строк.
Имейте в виду, что новые строки по умолчанию не отображаются в HTML-документе. В контексте HTML вместо этого вам нужно следующее:
echo '<div style="font-family: monospace; white-space:pre;">';
echo htmlspecialchars(var_export($response));
echo '</div>';
В php 5.4+ вы можете просто использовать PRETTY_PRINT
флаг json_encode:
echo json_encode($response, JSON_PRETTY_PRINT);
Опять же, в контексте HTML вам придется обернуть его, как описано выше.
Вставьте его в JSONLint.com и нажмите кнопку проверить.
Была аналогичная проблема в том, что я размещал сериализованный объект javascript в php-скрипт и хотел сохранить его на сервере в удобочитаемом формате.
Нашел этот пост на webdeveloper.com форум и немного изменил код, чтобы он соответствовал моим собственным ощущениям (для этого требуется строка в кодировке json):
function jsonToReadable($json){
$tc = 0; //tab count
$r = ''; //result
$q = false; //quotes
$t = "\t"; //tab
$nl = "\n"; //new line
for($i=0;$i<strlen($json);$i++){
$c = $json[$i];
if($c=='"' && $json[$i-1]!='\\') $q = !$q;
if($q){
$r .= $c;
continue;
}
switch($c){
case '{':
case '[':
$r .= $c . $nl . str_repeat($t, ++$tc);
break;
case '}':
case ']':
$r .= $nl . str_repeat($t, --$tc) . $c;
break;
case ',':
$r .= $c;
if($json[$i+1]!='{' && $json[$i+1]!='[') $r .= $nl . str_repeat($t, $tc);
break;
case ':':
$r .= $c . ' ';
break;
default:
$r .= $c;
}
}
return $r;
}
Передача
{"object":{"array":["one","two"],"sub-object":{"one":"string","two":2}}}
Возвращает
{
"object": {
"array": [
"one",
"two"
],
"sub-object": {
"one": "string",
"two": 2
}
}
}
echo '<pre>';
print_r(json_decode($response));
echo '</pre>';
Слишком просто?