2017-01-12 17 views
1

JSONを現在PHPで印刷しようとしていますが、Pretty-Printing JSON with PHPのようなスレッドを見ていますが、動作しません。私はPHPの午前7.0.8-0ubuntu0.16.04.3JSONがうまく動作しない

コード:

<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_PRINTJSON_UNESCAPED_SLASHESは実際には機能しません。何故ですか?これらはPHP 5.4からのものでPHP 7を使用しています。

+0

@MaxZoomちょうど同じ問題を試しました! – bwfcwalshy

+0

その出力はJSONエンコードされた2倍に見えます。 –

答えて

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); 
} 
関連する問題