![](/img/trans.png)
[英]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.