2017-05-25 19 views
0

jsonファイルを書き込むためにajaxを使用しています。しかし、ファイルの表示形式が正しくありません。jsonファイルの形式が正しく表示されない

AJAX:

$.ajax 
     ({ 
      type: "GET", 
      dataType : 'json', 
      contentType: "application/json", 
      async: false, 
      url: 'save_json.php', 
      data: { 
      data: JSON.stringify(data) 
      }, 
      success: function() {alert("Thanks!"); }, 
      failure: function() {alert("Error!");} 
     }); 

SAVE_JSON.PHP:

<?php 
$myFile = "profile.json"; 
$fh = fopen($myFile, 'w') or die("can't open file"); 
$stringData = $_GET["data"]; 
fwrite($fh, $stringData); 
fclose($fh) 
?> 

それは次のことを示しています

{"profile":[{"no":1,"firstName":"C","lastName":"D","age":25,"sex":"M","country":"US","phoneNumber":"019878736729","email":"[email protected]"},{"no":2,"firstName":"A","lastName":"B","age":28,"sex":"M","country":"VN","phoneNumber":"84928374839","email":"[email protected]"}]} 

が、私は次のように正しい形式で表示したい:

{ 
"profile": [ 
    { 
     "no": 1, 
     "firstName": "C", 
     "lastName": "D", 
     "age": 25, 
     "sex": "M", 
     "country": "US", 
     "phoneNumber": "019878736729", 
     "email": "[email protected]" 
    }, 
    { 
     "no": 2, 
     "firstName": "A", 
     "lastName": "B", 
     "age": 28, 
     "sex": "M", 
     "country": "VN", 
     "phoneNumber": "84928374839", 
     "email": "[email protected]" 
    } 
] 

}

誰か助けてもらえますか?

+2

フォーマットは正しいです。生のJSONファイルに改行はありません。それでもあなたのスクリプトは完全に読み込み可能です。人間が読める形式で表示したい場合は、PHPで 'print_r'または' var_dump'を使います。 –

+0

もっと具体的にすることはできますか? –

+1

'contentType:" application/json "、'意味がありません。あなたはGETリクエストをしています、コンテンツタイプを記述するリクエストボディはありません。 (なぜなら、なぜGETリクエストをしているのですか?エンドポイントがサーバー上のファイルに書き込んでいます、それはGETではないPUTの仕事です)。 – Quentin

答えて

2

この2つの部分と各部の役割を明確にしましょう。

  1. JavaScriptファイルがオブジェクト(「データ」)を取得し、JSON.stringify()を呼び出してJSON文字列に変換しています。それをあなたのPHPサーバに送ります。
  2. PHPサーバーが文字列をファイルに保存しています。この文字列はJSON文字列として扱われません。気にしません。

あなたはこれをどのように扱うことができるか、さまざまなアプローチがあります。あなたは、例えば、PHP側のオブジェクトに戻す文字列を回し、フォーマットされたバージョンをダンプすることができます:あなたはまた、JavaScriptの側でこのフォーマットを行うことができ

$obj = json_decode($string_data,true); 
$formatted_json = json_encode($obj, JSON_PRETTY_PRINT); 
fwrite($fh, $formatted_json); 

を、と1でJSON.stringify()にお電話を置き換えます追加パラメータ:

JSON.stringify(data,null,4) 

はかなり印刷をインデントするためにどのように多くのスペースである一方、ヌルは、あなたが代用機能を使用するつもりはないことを示しています。

どの方法を使用するか、使用する帯域幅はどれですか(フォーマットされたバージョンを送信すると、より多くのスペースが必要です)。

しかし、JSONパーサーはこの余分なスペースを使用しないことに注意してください。あなた(または他の人間)が読むのに役立つすべてのフォーマットです。

(そして、@Quentinはあなたの質問に対するコメントに優れた点を挙げています - この場合、 "GET"を使用するのは、多くの理由から悪い考えです。 "PUT"または最悪の場合 "POST"に切り替えます。 )

関連する問題