漂亮的打印 JSON 不起作用

bwf*_*shy 1 php json

我目前正在尝试在 PHP 中漂亮地打印 JSON,我已经查看了像Pretty-Printing JSON with PHP这样的线程,但它不起作用。我在 PHP 7.0.8-0ubuntu0.16.04.3

代码:

<form method="POST">
    <textarea name="json_data" id="json_data">
        <?php
            if(isset($_POST['json_data'])){
                echo json_encode($_POST['json_data'], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
            }
        ?>
    </textarea>

    <input type="submit" value="Pretty Print JSON">
</form>
Run Code Online (Sandbox Code Playgroud)

输出:

"[{\"title\":\"The Chainsmokers - Closer (Lyric) ft. Halsey\",\"length\":262000,\"id\":\"PT2_F-1esPk\",\"requester\":\"158310004187725824\",\"guildId\":\"226785954537406464\"}]"
Run Code Online (Sandbox Code Playgroud)

输入 JSON

[{"title":"The Chainsmokers - Closer (Lyric) ft. Halsey","length":262000,"id":"PT2_F-1esPk","requester":"158310004187725824","guildId":"226785954537406464"}]
Run Code Online (Sandbox Code Playgroud)

由于某种原因,这些选项JSON_PRETTY_PRINT实际上JSON_UNESCAPED_SLASHES不起作用。这是为什么?这些来自 PHP 5.4,我使用的是 PHP 7。

Bar*_*mar 5

$_POST['json_data']已经是一个 JSON 字符串,因此您正在对已经编码的内容进行编码;这基本上只是转义字符串内的所有双引号,并将结果包裹在引号中。您需要先对其进行解码,然后使用漂亮打印对结果进行编码。

if (isset($_POST['json_data'])) {
    $data = json_decode($_POST['json_data']);
    echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
}
Run Code Online (Sandbox Code Playgroud)