假设我有以下2个json对象:
JSON A:
{
"Field A":"1",
"Field B":"2",
"Field D":"Something",
"Field E":"6"
}
JSON B:
{
"Field A":"1",
"Field B":"2",
"Field C":"3",
"Field D":"Different"
}
Run Code Online (Sandbox Code Playgroud)
示例函数:function(jsonstringA,jsonstringB)
示例(如果JSON A和JSON B用作参数):
返回一个新的JSON对象,包含:
{
"Field C":"3", // because function sees jsonstringB had no "Field C"
"Field D": "Different" // sees jsonstringB had a different value for "Field D"
}
Run Code Online (Sandbox Code Playgroud)
请注意,它使用jsonstringA作为比较的基础,因此该函数仅返回缺少的字段和jsonStringB的值.这就是"Field E"及其价值不归还的原因.
如果可能的话,最好的方法是返回一个返回包含已更改值的json对象的函数?
我做过什么:我尝试通过手动指定我要检查的字段来进行比较,但是我希望有一些东西要求我不要对"字段"进行硬编码,因为它非常低效并且每次我添加JSON B的新领域,我必须在我正在寻找的领域进行硬编码...这就是为什么我在寻找一些不那么痛苦的东西.
Pet*_*son 16
创建这样的函数并不难.只需遍历第二个对象中的每个字段,如果它不在第一个中,或者该值与第一个不同,则将该字段放在返回对象中.
var compareJSON = function(obj1, obj2) {
var ret = {};
for(var i in obj2) {
if(!obj1.hasOwnProperty(i) || obj2[i] !== obj1[i]) {
ret[i] = obj2[i];
}
}
return ret;
};
Run Code Online (Sandbox Code Playgroud)
您可以在此演示页面上看到它的运行情况.
| 归档时间: |
|
| 查看次数: |
26558 次 |
| 最近记录: |