[英]How to match id key from two JSON files then update the source JSON with changes
這有點復雜,但我相信 stackoverflow 編碼天才會輕松掌握(菜鳥的榮譽)。 我有一個source.json
文件和一個changes.json
文件。 在更改文件中,我有更新、創建、刪除等的 CRUD 類型指令。這是我正在構建的節點中的命令行工具。
要更新播放列表條目,我必須將更改中的payload.id
與原始文件中的 playlist.id 相匹配……然后我假設delete.json()
是原始條目並改變更改。 為清楚起見,我只需要更新部分的幫助。 不確定如何在源和更改中匹配 id。 我在猜測.filter() 或.reduce()?
來源.json:
"playlists" : [
{
"id" : "1",
"owner_id" : "2",
"song_ids" : [
"8",
"32"
]
}
]
更改.json:
"playlists": [{
"action": "update",
"payload": [{
"id": "1",
"owner_id": "2",
"song_ids": [
"8"
]
}]
}
所需 output 寫入 output.json
"playlists" : [
{
"id" : "1",
"owner_id" : "2",
"song_ids" : [
"8"
]
}
]
到目前為止,我的代碼運行良好,但不知道如何將源 (playlist.id) 中的id
與更改 (payload.id) 匹配,如果匹配,則從源中刪除記錄並替換為我的更改記錄。 我認為它需要只是if
子句的update
部分中的一個子例程,然后是 a.push()。 謝謝大家!
// Stream in source file
const data = JSON.parse(fs.readFileSync('./' + inputFile));
// Stream in changes file
const changes = JSON.parse(fs.readFileSync('./' + changesFile));
for(const [table, actions] of Object.entries(changes)) {
console.log([table]);
if(!(table in data))continue;
// iterate through inner CRUD directives and mutate payloads
for(const actionDetail of actions) {
if(actionDetail.action === 'create') {
console.log('This is a CREATE entry');
data[table].push(...actionDetail.payload);
}
if(actionDetail.action === 'delete') {
console.log('This is a DELETE entry');
}
if(actionDetail.action === 'update') {
console.log('This is a UPDATE entry');
// const something = (is (source)payload.id === (changes)playlist.id) {
// if so, delete source entry and push new entry
// data[table].push(...actionDetail.payload);
//}
}
}
}
fs.writeFileSync('output.json', JSON.stringify(data, null, 2));
如果我正確理解你的數據集並應用你想要改變你的初始數據 object 的事實,你可以這樣:
console.log('This is a UPDATE entry');
actionDetail.payload.forEach((payload) => {
const index = data.playlists.findIndex(
(playlist) => playlist.id === payload.id
);
if (index > -1) data.playlists[index] = payload;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.