在网页上,我使用 jQuery 发布一些 JSON:
$.post('/url', data);
我的数据是一个包含一些值和数组的 javascript 对象。 JSON.stringify(data)
看起来像:
{"favoriteAnimal":"piglet", "okayAnimals":["cats","dogs"]}
我正在使用 ExpressJS(与 body-parser 中间件相连)在 NodeJS 网络应用程序中使用此 JSON。我可以检索最喜欢的动物,如 req.body.favoriteAnimal
,它会给我字符串 piglet
,这一切都很好,很漂亮。
但是我如何访问数组中的值呢?
req.body.favoriteAnimal // piglet
req.body.okayAnimals // undefined
req.body.okayAnimals[] // syntax error
这行得通...
req.body['okayAnimals[]']
...但闻起来有鱼腥味。如果正在发布的原始数据在其数组中仅包含一个元素,它也不会返回一个数组(它只返回一个字符串)。
JSON 的 jQuery 编码或 ExpressJS 中的解码是否发生了某些事情,这阻止了我像 req.body.okayAnimals
一样访问它并每次都获取一个数组?
最佳答案
Kevin 的回答几乎让我明白了。
$.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'
})
我看到我的浏览器发送了正确的 header
Content-Type:application/json; charset=UTF-8
观察
req.body={"favoriteAnimal":"piglet","okayAnimals":["cats","dogs"]}
关于javascript - 在 ExpressJS 中使用带有数组的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26536890/