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


save json object to string has some unwanted character

我尝试将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);
?>
第二个是:我找到了最终的输出。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}......

然而,当我使用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, .....

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

您从$_POST['json']获得的数据已经在json格式。PHP将它作为字符串获取。通过再次调用json_encode,您只是json_encode一个字符串,而不是json数据,因为它永远不会被服务器解析。这将导致php引用字符串并转义任何现有的引号。因为你已经得到json,你不需要json_encode行,或者你可以json_parse $_POST['json'],然后json_encode它再次。你的选择。

对数据进行了两次编码。首先,在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()的结果,看看它是否成功。