将json对象保存到字符串有一些不需要的字符

时间:2014-07-08 20:47:13

标签: php jquery ajax json

我尝试将json对象保存到文件中,在这里,我有两个问题。

第一个一个是"我如何获得成功或错误状态,表示写入json数据。

以下是我的代码:

 $.ajax({
                url: 'json.php',
                type: "POST",  // type should be POST
                data: {
                    json: JSON.stringify(jsonData),

                    name: workerId+".json"
                }, // send the string directly
                dataType: "json",
                success: function (response) {
                    alert(response['status']);
                },
                error: function (response) {
                    alert(response.status);
                }
            });

json.php:

<?php
   header("Content-type: application/json");
   $json = $_POST['json'];
   $name = $_POST['name'];
   $info = json_encode($json);
   $file = fopen($name,'w+');
   fwrite($file, $info);
   fclose($file);
?>

第二一个是: 我发现我的最终output.json文件有一些不需要的字符,如\"

"{\"compartments\":[{\"id\":0,\"type\":\"M\",\"name\":\"cytosol\",\"x\":0.0734694,\"y\":0.36478122582308947,\"w\":0.646259,\"h\":1,\"children\":{\"complexs\":[{\"id\":8,\"type\":\"C\",\"x\":0.4442110000000001,\"y\":0.537736,\"w\":0.0252632,\"h\":0.0188679}......

Howerver,当我使用console.log(JSON.stringify(jsonData));我发现结果正是我想要的。

{"compartments":[{"id":0,"type":"M","name":"cytosol","x":0.0734694,"y":0.36478122582308947,"w":0.646259,"h":1,"children":{"complexs":[{"id":8,"type":"C","x":0.4442110000000001,"y":0.537736,"w":0.0252632, .....

那么我该如何解决这个问题,谢谢!

2 个答案:

答案 0 :(得分:0)

您从$_POST['json']获取的数据已经是json格式。 PHP将它作为一个字符串。通过再次调用json_encode,你只是json_encode一个字符串,而不是json数据,因为它从未被服务器解析过。这导致php引用字符串并转义任何现有的引号。由于您已经获得了json,因此您不需要json_encode行,或者您可以使用json_parse $_POST['json']然后再次对其进行json_encode。你的选择。第一种选择可能更好。

答案 1 :(得分:0)

您将数据编码两次。首先,在Javascript中:

json: JSON.stringify(jsonData),

然后,再次,在PHP中:

$info = json_encode($json);

您看到的结果是已编码字符串的编码版本。删除PHP中的json_encode()调用:

$json = $_POST['json'];
$name = $_POST['name'];
$file = fopen($name,'w+');
if (fwrite($file, $json) === false)
{
  // something went wrong
}
fclose($file);

请注意,我们测试了fwrite()的结果,看它是否成功。