在 NodeJS 中解析 JSON 对象数组

Posted

技术标签:

【中文标题】在 NodeJS 中解析 JSON 对象数组【英文标题】:Parse Array of JSON objects in NodeJS 【发布时间】:2015-04-26 18:52:51 【问题描述】:

我想知道如何?

我想将 JSON 数组发布到服务器,并能够将接收到的数组用作常规 javascript 数组。

提前致谢。

这是我使用 stringify 函数将 Array 转换为 String 的前端部分

document.getElementById("sendJson").addEventListener("click", function () 
    $.post("/echo", JSON.stringify(QuestionsArray), function (data) 
        alert(data);
    );
)

这是我尝试将 JSON 对象数组转换为数组的后端部分

app.post('/echo', function (req, res) 
    var Array = JSON.parse(JSON.stringify(req.toString()));
    res.end(Array[0]["QuestionText"].toString());
);

这是我试图发送到服务器的数组:

[  
     
      "QuestionText":"What is your Name",
      "QuestionType":1
   ,
     
      "QuestionText":"Where are you from",
      "QuestionType":2,
      "ChoiceList":[  
         "US",
         "UK"
      ]
   ,
     
      "QuestionText":"Are you married",
      "QuestionType":3,
      "ChoiceList":[  
         "Yes",
         "No"
      ]
   
]

Here is the source code

【问题讨论】:

如果你已经在发送一个字符串化的数组(为什么你首先要这样做),你为什么要再次在服务器上对其进行字符串化? 如果在 NodeJS 部分中没有 stringify,我会遇到异常。 s1.postimg.org/v2urhx0kf/Capture.png 您需要使用 bodyparser 中间件,只需发布​​数组而不进行字符串化。 @VsevolodGoloviznin 请帮助伙计,我被困了好几天了。 req.body 可以工作,并消除解析和字符串化的复杂性 【参考方案1】:

在你的app.js

var bodyParser = require("body-parser");
...
app.use(bodyParser.urlencoded(extended: true));

然后你可以使用req.body 来获取发布的值:

app.post('/echo', function (req, res) 
    var Array = req.body.data;
    res.end(Array[0]["QuestionText"].toString());
);

在前端,不要做任何字符串化:

$.post("/echo", data: QuestionsArray, function (data) 
    alert(data);
);

【讨论】:

非常感谢。我怀疑它与bodyParser有关。但不会在一周内找到它【参考方案2】:

我会试着解释一下。首先,您在客户端上创建一个 json 字符串。

JSON.stringify(QuestionsArray)

然后在服务器上,你又在做同样的事情:

JSON.stringify(req.toString()) // this is not needed

然后你将双字符串化的 json 字符串解析为一个 javascript 对象:

JSON.parse(JSON.stringify(req.toString()))

所以现在你实际上必须解析它两次:)。如果您只是像现在一样在服务器上对其进行字符串化,然后调用:

var arr = JSON.parse(req.toString());

您将获得一个 javascript 对象,您可以像这样访问它:

res.end(arr[0].QuestionText.toString());

看看这个 jsFiddle 并打开你的开发者工具。运行时查看控制台,你会发现问题出在哪里:example

【讨论】:

【参考方案3】:

您实际上可以将 JSON 直接发送到服务器。

    $.ajax(
        url: "/echo",
        type: 'POST',
        data: JSON.stringify(QuestionsArray),
        processData: false,
        contentType: 'application/json'
    ).success(function (data) 
        alert(data);
    );

在 node.js 中,使用 bodyParser.json 将其取回。

app.use(bodyParser.json());

app.post('/echo', function (req, res) 
    var array = req.body;
    res.end(array[0]["QuestionText"].toString());
);

顺便说一句,不要使用Array 作为变量名,因为Array 代表JavaScript 使用的Array 类,而您的代码已经覆盖了它。

【讨论】:

以上是关于在 NodeJS 中解析 JSON 对象数组的主要内容,如果未能解决你的问题,请参考以下文章

在 Nodejs 中解析大型 JSON 文件并独立处理每个对象

在 NodeJs 中使用 fast-xml-parser 将特定标签解析为数组

学习nodejs必会基础预备知识

在 Nodejs 中解析大型 JSON 文件

如何在NodeJS服务器中解析ajax发送的数组/对象

与 nodejs、mongoose 和 JSON 对象数组拼接