15

json データを取得し、それをフォーマットして読みやすくする「単純な」スクリプトはどこかにありますか?

例えば:

// $response is a json encoded string.
var_dump($response);

上記は、すべてを 1 行に出力します。読みやすくするためにインデントと間隔を空けてください。

4

7 に答える 7

21

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 以降では、単純にjson_encodePRETTY_PRINTのフラグを使用できます。

echo json_encode($response, JSON_PRETTY_PRINT);

繰り返しますが、HTML コンテキストでは、上記のようにラップする必要があります。

于 2011-09-12T20:40:39.180 に答える
12

それをJSONLint.comに貼り付けて、[検証] をクリックします。

于 2011-09-12T20:42:37.397 に答える
12

同様の問題がありました。シリアル化された 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
        }
    }
}
于 2012-04-17T00:31:14.180 に答える
7

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

于 2017-01-16T19:14:05.290 に答える
2
echo '<pre>';
print_r(json_decode($response));
echo '</pre>';

単純すぎます?

于 2012-07-24T13:52:20.127 に答える
0

python を使用するという提案は、私にとってはうまくいきました。PHP からこれを使用するためのコードを次に示します。

function jsonEncode( $data, $pretty = false ) {
    $str = json_encode($data);
    if( $pretty ) {
        $descriptorSpec = array(
                0 => array('pipe', 'r'),  // stdin is a pipe that the child will read from
                1 => array('pipe', 'w'),  // stdout is a pipe that the child will write to
        );
        $fp = proc_open('/usr/bin/python -mjson.tool', $descriptorSpec, $pipes);
        fputs($pipes[0], $str);
        fclose($pipes[0]);
        $str = '';
        while( !feof($pipes[1]) ) {
            $str .= $chunk = fgets($pipes[1], 1024);
        }
        fclose($pipes[1]);
    }
    return $str;
}
于 2012-07-24T13:43:53.483 に答える
0

にパイプしますpython -mjson.tool

于 2011-09-12T20:46:58.113 に答える