json文件显示错误的格式

时间:2017-05-25 02:54:15

标签: javascript php json ajax format

我使用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":"johnsmith@example.com"},{"no":2,"firstName":"A","lastName":"B","age":28,"sex":"M","country":"VN","phoneNumber":"84928374839","email":"nguyentam@example.com"}]}

但我希望以正确的格式显示如下:

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

}

有人能帮助我吗?

1 个答案:

答案 0 :(得分:2)

让我们清楚一下这两部分以及各部分的作用。

  1. 您的JavaScript文件正在获取一个对象(“数据”),并通过调用JSON.stringify()将其转换为JSON字符串。然后将它发送到您的PHP服务器。
  2. 您的PHP服务器正在将字符串保存到文件中。它根本不将此字符串作为JSON字符串处理 - 它并不关心。
  3. 你有很多方法可以解决这个问题。例如,您可以将字符串转换回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)
    

    null 表示您不打算使用替换器功能,而 4 是缩进漂亮打印的空间数。

    您使用哪种方法取决于您以及您想要使用多少带宽(发送格式化版本会占用更多空间)。

    但请记住,JSON解析器不使用这个额外空间 - 它是帮助您(或其他人)阅读它的所有格式。

    (并且@Quentin在你的问题的评论中提出了一个很好的观点 - 在这种情况下使用“GET”是一个坏主意,原因很多。切换到“PUT”或者最坏的情况是“POST”。)