javascript 将POST数组数据解析为JSON

nx7onnlm  于 2023-05-27  发布在  Java
关注(0)|答案(4)|浏览(125)

我的应用是使用Express的Node.js。
使用jQuery POST从我的客户端发送以下测试数据:

{
title: 'hello',
notes: [
{title: 'note 1'},
{title: 'note 2'}
]

}
这是我的服务器代码中的结果:

{ title: 'hello', notes: { '0': { title: 'note 1' }, '1': { title: 'note 2' } } }

我想把笔记数组作为数组插入我的数据库。我错过了什么?
因为我不能自己添加一个答案8小时(wtf?)但它并没有真正回答为什么Express.bodyParser不能正确解析JSON
好的,我可以使用以下命令让它工作:

JSON.stringify ( data )

在客户端,然后在服务器端使用

JSON.parse( req.rawBody )

这感觉不对,为什么Express.bodyParser不能正确解析JSON?!

svmlkihl

svmlkihl1#

关于你的客户:

$.ajax({
  type: 'POST',
  data: JSON.stringify(data),
  contentType: 'application/json',
  url: '/endpoint'
});

在您的服务器上:

console.log('POST: ',req.body);

问题是jQuery在发送数据之前会对数据进行处理。如果你设置了正确的MIME类型,那么它会让你自由。

x0fgdtte

x0fgdtte2#

你能发布你的客户端jQuery代码吗?默认情况下,jQuery将以urlencoded的形式发送数据,而不是JSON。请参阅this question's answer以了解确保jQuery发送真实的JSON数据的方法。
仅供参考,express/connect bodyParser middleware只是使用JSON.parse来解析JSON(以及qs.parse来解析urlencoded数据)。我不认为这些代码中有任何明显的bug。因此,我认为你应该仔细检查你从浏览器发送的数据。

mctunoxg

mctunoxg3#

我在寻找其他nodejs的东西时遇到了这个老问题。
jQuery.ajax()函数使用JSON发送数据是一个常见的误解。jQuery发送的数据是POST数据,而不是JSON字符串。因此,所有数据类型(包括数组中的数字)都作为字符串发送。
这意味着express将'array'键解析为字符串,并且由于在javascript中,数组如果不是对象就不能有字符串键,因此它被转换为对象。

neekobn8

neekobn84#

那就说得通了你可以使用Express.bodyParser来得到这样的结果,或者你可以使用JSON.parse甚至eval('(' + myPostedData + ')')来得到一个没有索引的结果对象。
使用当前设置,您需要做的就是:

for(var j = 0; j < myVariable.notes.length; j++)
{
    var currentNode = myVariable.notes[j];

    //currentode.title should be 'note 1' for j = 0, etc
}

相关问题