【发布时间】:2020-06-25 14:11:24
【问题描述】:
我想比较两个 JSON 文件,并根据它们的“Id”仅输出新添加的对象。我还需要忽略 JSON 文件中对象位置的变化(我不想比较行的变化)。
您会在下面的代码中注意到 Greg 的年龄发生了变化 - 我也不想在我的输出中包含这些类型的 (Key:Value) 变化。
我目前正在使用一个名为 json-diff 的包。
这是我当前的代码:
const jsonDiff = require('json-diff');
var oldJson = {
"data": [
{
"Id": "2",
"Name": "Greg",
"ranges": [
{
"age": "70"
}
]
},
{
"Id": "1",
"Name": "Tom",
"ranges": [
{
"age": "10"
}
]
}
]
};
var newJson = {
"data": [
{
"Id": "2",
"Name": "Greg",
"ranges": [
{
"age": "20" // Even though Greg's age has changed, I don't want it in my output
}
]
},
{
"Id": "3",
"Name": "Bob",
"ranges": [
{
"age": "30"
}
]
},
{
"Id": "1",
"Name": "Tom",
"ranges": [
{
"age": "10"
}
]
}
]
};
function compare(newJson, oldJson) {
let rawDiff = jsonDiff.diff(newJson.data, oldJson.data);
let prettyDiff = JSON.stringify(rawDiff).replace(/,\[" "]/g, '');
console.log(prettyDiff);
}
compare(newJson, oldJson);
当前输出:
[
[
"~",
{
"ranges": [
[
"-",
{
"age": "20"
}
],
[
"+",
{
"age": "70"
}
]
]
}
],
[
"-",
{
"Id": "3",
"Name": "Bob",
"ranges": [
{
"age": "30"
}
]
}
]
]
需要的输出:
{
"data": [
{
"Id": "3",
"Name": "Bob",
"ranges": [
{
"age": "30"
}
]
}
]
}
【问题讨论】:
-
您可以遍历数组并单独查找新的 id。此问题不是通用问题,您需要构建自定义逻辑。没有包或库会做你所期望的确切的事情
-
到目前为止你尝试过什么?添加您尝试过的代码并解释您遇到的问题。
-
@Molda 更新了我的问题。
标签: javascript node.js json compare diff