我应该如何解析Node.js中的对象数组?

时间:2018-05-23 14:23:22

标签: html node.js express body-parser

根据我的研究,通过POST方法传递对象数组的最佳方法是使用以下名称约定:

<!-- first student -->
<input type="text" name="students[][first]">
<input type="text" name="students[][last]">
<input type="text" name="students[][age]">

<!-- second student -->
<input type="text" name="students[][first]">
<input type="text" name="students[][last]">
<input type="text" name="students[][age]">

身体解析器设置:

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

当我输入后期路线“req.body.students”时,我期待像这样的一系列对象:

[ { first: Fname1, last: Lname1, age: Age1} , { first: Fname2, last: Lname2, age: Age2}

相反,我的console.log显示我得到了这个:

[ { first : [Fname1 , Fname2], last : [Lname1, Lname2], age : [Age1, Age2] } ] 

它出了什么问题?干杯!

1 个答案:

答案 0 :(得分:0)

这就是the qa library处理格式数据的方式。

我不会期望库的行为,而且它与PHP(明显的灵感)如何处理数据有所不同。所以你可能会认为这是一个bug join in the discussion on this issue

您可以通过为行使用显式索引来解决此问题:

<!-- first student -->
<input type="text" name="students[0][first]">
<input type="text" name="students[0][last]">
<input type="text" name="students[0][age]">

<!-- second student -->
<input type="text" name="students[1][first]">
<input type="text" name="students[1][last]">
<input type="text" name="students[1][age]">

测试用例:

var qs = require("qs");
var data = "students[0][name]=alice&students[0][age]=11&students[1][name]=bob&students[1][age]=12";
console.log(qs.parse(data));

输出:

{ students: [ { name: 'alice', age: '11' }, { name: 'bob', age: '12' } ] }