[英]JSON.parse() reviver function: How to access to a higher level object
[英]How do I use `JSON.parse`'s reviver function to add data to each object in an array?
假设我将以下JSON对象保存在这样的变量中:
var musicList = {
"files": [
{
"title": "Ironic"
},
{
"title": "It's Beginning To Look A Lot Like Christmas"
},
{
"title": "Sweet Dreams"
}
]
};
这是一个学习练习,我们将这个JSON对象转换为字符串,然后再次将其解析回一个对象...
console.log(musicList); // prints the object in the musicList variable
var stringifiedMusic = JSON.stringify(musicList);
console.log(stringifiedMusic); // prints the string version of the musicList object
但是我没有期望得到想要的结果,这是使用files
键将简单的递增ID号添加到数组中的每个对象。 我相信我没有正确编写Reviver功能...
var parsedMusic = JSON.parse(stringifiedMusic, function(key, value) {
var idIncrementor = 0;
var incrementorObject = [
{id: idIncrementor}
];
if (key === 'files') {
idIncrementor++;
return value.map(function (item, index) {
return Object.assign({}, item, incrementorObject[index]);
});
}
return value;
});
现在,这似乎只是将id: 0
键值对添加到第一个对象,而不是其他对象。 这必须是因为if (key === 'files')...
语句仅一次为true。 如果只有key
和value
参数传入函数,我将在if
语句中检查对数组中的三个对象是否正确的内容?
您无需创建新对象。 如果正确使用map
函数,将返回一个新数组(带有新对象)。 您可以使用map
提供的索引来获取您的ID。
var musicList = {
"files": [
{
"title": "Ironic"
},
{
"title": "It's Beginning To Look A Lot Like Christmas"
},
{
"title": "Sweet Dreams"
}
]
};
var stringifiedMusic = JSON.stringify(musicList);
var parsedMusic = JSON.parse(stringifiedMusic, function(key, value) {
if (key === 'files') {
return value.map(function (item, index) {
item.id = index;
return item;
});
}
return value;
});
console.log("parsedMusic", parsedMusic)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.