在 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 文件并独立处理每个对象