我想知道如何解析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"
]
}
]
答案 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>