替换类似json中的值

Replacing values in similar jsons

本文关键字:json 替换      更新时间:2023-09-26

考虑这样的情况:我有两个复杂的json——一个有完整的属性列表,另一个理论上是相同的,但可能缺少一些值。我需要使用分部覆盖第一个值中的值。

我怎样才能做到这一点?我试过这样的东西:

function ObjectValues(data) {
                var isArray = data instanceof Array;
                for (var key in data) {
                    if (data.hasOwnProperty(key)) {
                        if (typeof (data[key]) == "object") {
                            if (!isArray) {
                                profileData[key] = data[key];
                            }
                            ObjectValues(data[key]);
                        } else if (!isArray) {
                        }
                    }
                }
            }
            ObjectValues(data);

其思想是循环遍历部分json(数据)并覆盖profileData中的相应值。这个函数可以在结构中循环(只要对象中有对象,它就会在这个级别上启动),但我不知道如何使它覆盖每个级别上的值,因为profileData[key]=data[key]还不够

编辑:一个简单的例子是:

Data = { 
    "activity": {
         "online": [1,1,3,4,0,1,0,3,2],
         }
    },
    "location": "Antarctica",
}
profileData = { 
    "activity": {
         "online": [],
         }
    },
    "location": "N/A",
}

现在,我要

    profileData = { 
    "activity": {
         "online": [],
         }
    },
    "online": [1,1,3,4,0,1,0,3,2],
    "location": "Antarctica",
}

它在第一级运行良好,但很明显,它只是将更深层次的键附加到根(正如您所期望的)。问题是检索子迭代中的密钥路径。

如果您可以使用JQuery,那么您可以直接调用extend,而不是尝试编写自己的方法

$.extend(true, profileData, data);

这将用data中的值覆盖partialData中的值,并从data中添加任何额外的键。