Javascript 解析NodeJS中JSON对象的数组

Javascript 解析NodeJS中JSON对象的数组,javascript,arrays,json,node.js,Javascript,Arrays,Json,Node.js,我想知道如何在NodeJS中解析JSON对象数组 我希望将JSON数组发布到服务器,并能够将接收到的数组用作常规JavaScript数组 提前谢谢 这是我的前端部分,我正在使用stringify函数将数组转换为字符串 document.getElementById("sendJson").addEventListener("click", function () { $.post("/echo", JSON.stringify(QuestionsArray), function (dat

我想知道如何在NodeJS中解析JSON对象数组

我希望将JSON数组发布到服务器,并能够将接收到的数组用作常规JavaScript数组

提前谢谢

这是我的前端部分,我正在使用stringify函数将数组转换为字符串

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"
      ]
   }
]

在你的
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);
});

我会尽力解释的。首先,您要在客户机上装入一个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());

看看这个JSFIDLE并打开开发人员工具。当控制台运行时,您将看到问题所在:

您实际上可以将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
类,并且您的代码已经覆盖了它。

如果您已经发送了字符串化的数组(首先为什么要这样做),为什么要在服务器上再次进行stringify呢?如果在NodeJS部分中没有stringify,我会遇到异常。您需要使用bodyparser中间件,只需发布数组而不进行字符串化。@VsevolodGoloviznin请帮帮我,我在这方面有好几天的工作要做。
req.body
可以工作,并且可以消除解析和字符串化的过度复杂性谢谢。我怀疑这和bodyParser有关。但是一个星期内就找不到了