我正在尝试将JSON对象写入服务器上的.json文件。我现在这样做的方式是:
JavaScript:
function createJsonFile() { var jsonObject = { "metros" : [], "routes" : [] }; // write cities to JSON Object for ( var index = 0; index < graph.getVerticies().length; index++) { jsonObject.metros[index] = JSON.stringify(graph.getVertex(index).getData()); } // write routes to JSON Object for ( var index = 0; index < graph.getEdges().length; index++) { jsonObject.routes[index] = JSON.stringify(graph.getEdge(index)); } // some jQuery to write to file $.ajax({ type : "POST", url : "json.php", dataType : 'json', data : { json : jsonObject } }); };
PHP:
<?php $json = $_POST['json']; $info = json_encode($json); $file = fopen('new_map_data.json','w+'); fwrite($file, $info); fclose($file); ?>
它写得很好,并且信息似乎是正确的,但是呈现不正确。它显示为:
{"metros":["{\\\"code\\\":\\\"SCL\\\",\\\"name\\\":\\\"Santiago\\\",\\\"country\\\":\\\"CL\\\",\\\"continent\\\":\\\"South America\\\",\\\"timezone\\\":-4,\\\"coordinates\\\":{\\\"S\\\":33,\\\"W\\\":71},\\\"population\\\":6000000,\\\"region\\\":1}",
…但是我期望这样:
"metros" : [ { "code" : "SCL" , "name" : "Santiago" , "country" : "CL" , "continent" : "South America" , "timezone" : -4 , "coordinates" : {"S" : 33, "W" : 71} , "population" : 6000000 , "region" : 1 } ,
为什么我会得到所有这些斜线,为什么都将它们全部放在一行?
您正在双重编码。无需使用JS 和 PHP 进行编码,只需在一侧进行编码, 然后 再进行一次编码。
// step 1: build data structure var data = { metros: graph.getVerticies(), routes: graph.getEdges() } // step 2: convert data structure to JSON $.ajax({ type : "POST", url : "json.php", data : { json : JSON.stringify(data) } });
请注意,该dataType参数表示预期的 响应 类型,而不是您将数据发送为的类型。application/x-www-form- urlencoded默认情况下,发帖请求将被发送。
dataType
application/x-www-form- urlencoded
我认为您根本不需要该参数。您可以将其缩减为:
$.post("json.php", {json : JSON.stringify(data)});
然后(在PHP中)执行以下操作:
<?php $json = $_POST['json']; /* sanity check */ if (json_decode($json) != null) { $file = fopen('new_map_data.json','w+'); fwrite($file, $json); fclose($file); } else { // user has posted invalid JSON, handle the error } ?>