我正在尝试在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>
输出:
"[{\"title\":\"The Chainsmokers - Closer (Lyric) ft. Halsey\",\"length\":262000,\"id\":\"PT2_F-1esPk\",\"requester\":\"158310004187725824\",\"guildId\":\"226785954537406464\"}]"
输入JSON
[{"title":"The Chainsmokers - Closer (Lyric) ft. Halsey","length":262000,"id":"PT2_F-1esPk","requester":"158310004187725824","guildId":"226785954537406464"}]
出于某种原因,选项JSON_PRETTY_PRINT
和JSON_UNESCAPED_SLASHES
实际上并不起作用。这是为什么?这些来自PHP 5.4,我在PHP 7上。
答案 0 :(得分:3)
$_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);
}