Читаемый человеком JSON: aka добавляет пробелы и разрывы в дамп json
есть ли "простой" скрипт, который возьмет данные json и отформатирует их, чтобы сделать их более читаемыми?
например:
// $response is a json encoded string.
var_dump($response);
выше выводит все на одной строке. Я бы хотел, чтобы он был отступом и разнесен, чтобы его было легче читать.
6 ответов
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
do печати, строк.
имейте в виду, что новые строки не отображаются в 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 вам придется обернуть его, как описано выше.
была аналогичная проблема, в том, что я размещал сериализованный объект 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
}
}
}