我尝试将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, .....
那么我该如何解决这个问题,谢谢!
答案 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()
的结果,看它是否成功。