当前位置: 首页 > 面试题库 >

将JSON对象写入服务器上的.json文件

蓟辰沛
2023-03-14
问题内容

我正在尝试将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默认情况下,发帖请求将被发送。

我认为您根本不需要该参数。您可以将其缩减为:

$.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 
   }
?>


 类似资料:
  • 问题内容: 我在javascript中有一个JSON对象。我只想将JSON对象写入文本文件。到目前为止,从我遇到的情况来看,由于客户端的安全问题,无法这样做。有解决方法吗?如果最初放置一些虚拟值,是否可以修改已经存在的文件? 谢谢 问题答案: 您可以做的一件事就是将JSON设置为即时下载。 工作演示:http : //jsfiddle.net/sLq3F/ 除此之外,由于安全原因,您无法在客户端的

  • 问题内容: 我创建了一个需要发布到jersey的json,这是由grizzly运行的具有REST网络服务的服务器获取需要输出的传入json对象。我正在尝试,但不确定如何正确实施。 我有一个在加载时运行此方法的html文件 问题答案: 要将json发送到服务器,首先必须创建json 这就是构造ajax请求以将json作为post var发送的方式。 json现在将在post var中。

  • 我使用角来创建一个应用程序,并要求存储一个json对象当前存储在变量file.json位于src/app/资产使用角。我找了很多,没有找到这样做的方法。询问是否需要更多信息。

  • 问题内容: 我正在使用.js客户端,并且有我需要写到服务器上文件的对象。有两个问题-使用JavaScript进行文件I / O对我来说是新手…我正计划使用jquery和json。我正在使用Java服务器端。我从servlet读取的内容没有问题,但是文件I / O杀死了我!几个问题: 我可以使用$ .ajax调用打开通过.js生成的文件,但是它无法处理json语法(我尝试了$ .getJson和$

  • 我正在尝试编写我的第一个json文件。但由于某种原因,它实际上不会写入文件。我知道它在做一些事情,因为在运行转储之后,我放入文件中的任何随机文本都会被擦除,但它的位置上没有任何东西。不用说,但加载部分抛出和错误,因为那里什么都没有。这难道不应该将所有json文本添加到文件中吗?

  • 问题内容: 我正在寻找通过GET将JSON对象发送到服务器。克里斯关于通过JSON将对象数组发布到ASP.Net MVC3的答案适用于httpPOST,但不适用于GET。我的情况也适用于POST,但不适用于GET。如何使GET工作正常这是我的情况:在Controller中,我有以下方法publicActionResult Screenreport(Screentable screendata) 我