2017-05-25 193 views
0

我正在使用ajax來編寫json文件。但文件顯示格式不正確。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請求?端點正在寫入服務器上的一個文件,這是一個PUT而不是GET的工作)。 – Quentin

回答

2

讓我們清楚這兩個部分和每個部分正在做什麼。

  1. 您的JavaScript文件正在接收一個對象(「數據」)並將其轉換爲JSON字符串,並調用JSON.stringify()。然後它將它發送到您的PHP服務器。
  2. 您的PHP服務器正在將一個字符串保存到文件中。它根本不處理這個字符串作爲JSON字符串 - 它不關心。

你有一堆方法可以處理這個問題。你可以,例如,把字符串回到對象在PHP端和轉儲格式化版本:

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

你也可以做的JavaScript端此格式,使用一個與更換您的來電JSON.stringify()其他參數:

JSON.stringify(data,null,4) 

表明你不打算使用替代品的功能,而是多少空格縮進漂亮的印刷。

您使用哪種方法取決於您,您要使用多少帶寬(發送格式化版本佔用更多空間)。

但請記住,JSON解析器不會使用這個額外的空間 - 它都是格式化以幫助您(或其他人)讀取它。 (@Quentin在你的問題的評論中提出了一個很好的觀點 - 在這種情況下使用「GET」是一個壞主意,原因很多,切換到「PUT」或者最壞的情況是「POST」。 )