解析NodeJS中的JSON对象数组

时间:2015-02-24 22:43:22

标签: javascript arrays json node.js

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

我想将JSON数组发布到服务器,并且能够将接收到的数组用作regualar 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

3 个答案:

答案 0 :(得分:8)

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);
});

答案 1 :(得分: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

答案 2 :(得分:2)

您实际上可以将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类,而您的代码已覆盖它。 < / p>