【发布时间】:2014-12-17 09:05:43
【问题描述】:
我正在使用 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 转换为的任何内容。我还尝试对 ajax 的 data: 部分使用 JSON.stringify({json: theJsonBeingWritten}) 但无济于事。我也尝试过使用 $.post("json.php", theJsonBeingWritten);而不是 $.ajax 但这也不起作用。我还将内容类型设置为 Content-type: application/json"。
【问题讨论】:
-
在哪里您收到错误消息,表明您的 JSON 文件无效?显示尝试读取它的代码。您是否使用 hexeditor 检查了您的 .json 文件?无效的字符串编码只会产生
null值。 -
你是怎么得到“theJsonBeingWritten”的?
-
在记事本(或者我的首选notepad++)中打开.json文件,查看内容是否为有效的json。
-
从写入服务器的文件复制/粘贴时,我从在线验证器收到错误。但这不是肉眼可以看到的东西。这就像一个底层编码或其他东西。 theJsonBeingWritten 来自一个字符串,该字符串在结构中被格式化为看起来像 json ......然后被字符串化并解析为实际上是 json。但同样......它确实产生了有效的 json......这是问题所在。
-
验证者说什么?就像上面的评论一样,您可以尝试复制/粘贴到文本编辑器中,该编辑器可以为您重新编码内容以查看是否会通过验证。
标签: php ajax json encoding server-side