我使用PHP脚本将json保存到服务器,如下所示:
<?php
$json = $_POST['json'];
$file = fopen('jsonfile.json', 'wb');
fwrite($file, $json);
fclose($file);
?>
该脚本读入现有的jsonfile.json文件并将新的json写入其中...然后将其保存到服务器。但这会导致无效的json。我知道实际的json确实有效,因为如果我使用document.write()在浏览器中显示json,并将json复制/粘贴到验证器,那就完美了。但是,已写入服务器的文件中的实际json无效,因此无法用于任何程序。
我认为它有一些与编码有关的东西。我已经尝试使用在PHP脚本中强制执行UTF-8的标头,但无济于事。
json看起来像这样:
{
"name":"First Name",
"children":[
{
"name":"Second Name",
"children":[
{
"name":"Third Name",
"children":[
{
依旧......
同样,这是有效的JSON,就像使用document.write()并粘贴到验证器中一样。如果我要在已写入服务器的文件中显示json,它看起来会相同。这就像有一些隐藏的格式,我们看不到不允许验证器通过它,显然不允许程序运行它。
这是将json发布到php脚本的AJAX:
$.ajax({
url: 'json.php',
data: {
json: theJsonBeingWritten
},
dataType: "json",
type: "POST"
});
这成功地将文件写入服务器,但格式/字符有问题(?)
我还尝试将processData:false添加到AJAX部分,以便停止转换为PHP将json转换为的内容。我也尝试使用JSON.stringify({json:theJsonBeingWritten})来获取数据:ajax的部分,但无济于事。我也尝试过使用$ .post(“json.php”,theJsonBeingWritten);而不是$ .ajax但这也没有用。我还将content-type设置为Content-type:application / json“。
答案 0 :(得分:0)
fopen没什么问题..
$a = fopen("data.json", "w");
fwrite($a,$json);
fclose($a);
这会将任何字符串$ json写入文件data.json
答案 1 :(得分:0)
所以我终于能够发现JSON中那些偷偷摸摸的小符号。这些没有出现在任何文本编辑器或十六进制编辑器或验证器中。只有在看到原始URL中的JSON之后才会出现抑扬符号。尽管有任何强制编码的尝试,但PHP fwrite()函数中的某些东西正在强制执行这些操作。无论如何,在使用fwrite()之前使用以下命令从PHP脚本中删除json中的字符就可以了:
$string = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $string);