在ExpressJS中使用带有数组的JSON
Consuming JSON with an array in ExpressJS
在网页上,我正在使用jQuery:发布一些JSON
$.post('/url', data);
我的数据是一个javascript对象,其中包含一些值和一个数组。JSON.stringify(data)
看起来像:
{"favoriteAnimal":"piglet", "okayAnimals":["cats","dogs"]}
我正在使用ExpressJS(与主体解析器中间件连接)在NodeJS Web应用程序中使用这个JSON。我可以检索到像req.body.favoriteAnimal
这样的最喜欢的动物,它给了我字符串piglet
,这一切都很好。
但是我如何访问数组中的值呢?
req.body.favoriteAnimal // piglet
req.body.okayAnimals // undefined
req.body.okayAnimals[] // syntax error
这很有效。。。
req.body['okayAnimals[]']
但是闻起来有腥味。如果要POST的原始数据的数组中只包含一个元素(它只返回一个字符串),它也不会返回数组。
是JSON的jQuery编码发生了什么问题,还是ExpressJS中的解码发生了什么事情,使我无法像req.body.okayAnimals
一样访问它,每次都无法获得数组?
$.post('/url', JSON.stringify(data))
将发送一个更近一步的字符串。不幸的是,jQuery的$.post
设置了错误的头
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
ExpressJS的主体解析器将无法正确处理。你最终得到
req.body={"{'"favoriteAnimal'":'"piglet'",'"okayAnimals'":['"cats'",'"dogs'"]}":""}
我重写了发送数据的方式。
$.ajax({
url: '/url',
type: 'POST',
data: data,
contentType: 'application/json; charset=utf-8',
dataType: 'json'
})
我看到我的浏览器正在发送正确的标题
Content-Type:application/json; charset=UTF-8
并观察到
req.body={"favoriteAnimal":"piglet","okayAnimals":["cats","dogs"]}
JavaScript对象和JSON是两个非常不同的东西,这是您看到的问题的根源。传递给$.post()
的实际上是一个对象,而不是json,因此在发送到节点之前,jQuery会将其转换为paramstring。在这种情况下,paramstring是:
favoriteAnimal=piglet&okayAnimals[]=cats&okayAnimals[]=dogs
这当然解释了为什么CCD_ 8特性存在于身体上。
我很惊讶你用来解析正文的中间件没有正确地接收到它,但不管怎样,如果你想按原样发送,你应该向$.post
传递一个json字符串。
$.post('/url', JSON.stringify(data));
- 为DataTables aoColumnDefs创建JavaScript数组(JSON格式)
- 使用 Javascript 将行添加到数组 json
- PHP数组JSON编码和该对象在ExtJs中解码
- 数组json转换为数组json
- 将Blob文本转换为Javascript中的数组/JSON对象
- 如何合并这些数组/json 对象
- 尝试从数组 JSON 键中删除引号
- JavaScript 中的数组 JSON
- 在数组 JSON 格式的 JavaScript 变量末尾添加新地址
- 如何访问这个Javascript数组(JSON对象?)
- rails传递记录数组(JSON)
- 按值提取对象/数组json vs数组
- 获取具有子数组json值的数组的值
- Object对象数组Json.字符串数组的字符串化
- 如何在Ext js 4.1中过滤数组json
- PHP -多维数组Json
- 正在分析数组Json以选择Tag
- 试图将字符串数据转换为数值数据,将数据放入数组的数组(Json)
- 从数组json、javascript中的specf值中删除引号
- 使用JavaScript或jQuery读取数组JSON