JS取回JSON解析是修改对象
JS Fetch JSON parse is modifying object
我在fetch中遇到过这种奇怪的行为。
首先看看这个长度(这是正确的)和实际结构的截图:
考虑以下来自服务器的json响应,其中likes
数组显然包含一个对象,而comments
数组包含两个对象:
{
"status":"success",
"payload":{
"272699880986":{
"likes":[
{
"createdTime":"2016-11-07T04:41:21.000Z",
"senderId":10209615042475034,
"senderName":"Alfredo Re",
"likes":1
}
],
"comments":[
{
"createdTime":"2016-11-07T04:41:54.000Z",
"senderId":1021426764639564,
"senderName":"Alfredo J. Re",
"comments":1
},
{
"createdTime":"2016-11-07T04:41:24.000Z",
"senderId":10209615042475034,
"senderName":"Alfredo Re",
"comments":1
}
]
}
}
}
现在,将响应传递给整个response.json()
,像这样:
fetch('http://example.com/entries.json', {
method: 'GET',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
...authKeys,
}
})
.then(response => {
switch(response.status){
case 200:
console.log('status 200', response)
return response.json()
}
})
.then(json => {
console.log('parsed response')
console.log(json)
})
得到以下结果:
{
"status":"success",
"payload":{
"272699880986":{
"likes":[
{
"createdTime":"2016-11-07T04:41:54.000Z",
"senderId":1021426764639564,
"senderName":"Alfredo J. Re",
"likes": 1,
"comments":1
},
{
"createdTime":"2016-11-07T04:41:24.000Z",
"senderId":10209615042475034,
"senderName":"Alfredo Re",
"comments":1
}
],
"comments":[
{
"createdTime":"2016-11-07T04:41:54.000Z",
"senderId":1021426764639564,
"senderName":"Alfredo J. Re",
"comments":1
},
{
"createdTime":"2016-11-07T04:41:24.000Z",
"senderId":10209615042475034,
"senderName":"Alfredo Re",
"comments":1
}
]
}
}
}
看看它是如何混淆likes
和comments
集合的。我现在都快疯了。我错过什么了吗?
这是一个gif显示chrome的控制台列表显示数组包含一个对象,另一个包含两个对象。当我单击前者时,它会变成一个包含两个对象的数组!这让我很困惑
好的,我发现它实际上是lodash的_.merge()
在获取它们后改变了我的对象方式。我正在使用lodash基于senderId
键合并两个集合(喜欢和评论)。
为了记录,我最终使用了这个方法:https://stackoverflow.com/a/35094948/1418038
相关文章:
- 使用AngularJS修改对象位置只需一次
- Reactjs:在修改对象之前,是否需要复制处于组件状态的对象
- 修改对象的原型不起作用
- 在 Javascript 中修改对象
- 通过Web服务修改对象列表,如何获取最终值列表
- 修改对象属性的方法中的 JavaScript 变量
- 在PouchDB/Barket.js中推送promise数组之前修改对象的值
- 就地修改对象javascript
- Backbone JS事件函数修改对象
- Javascript:从指针修改对象
- 使用Undercore在另一个对象内部修改对象内部的数组
- 修改对象's键而不创建新对象
- 在发布文档之前,如何在find()中修改对象级别的文档
- 在加载对象DOM之前修改对象DOM
- JS取回JSON解析是修改对象
- 继承和修改对象
- 在javascript中修改对象中的节点
- 修改对象存储的主键值
- 如何在修改对象后更新html中的数据
- Parse.com云功能-在发送到客户端之前手动修改对象字段