使用javascript填充另一个JSON
给定一个空JSON 1:使用javascript填充另一个JSON,javascript,json,foreach,Javascript,Json,Foreach,给定一个空JSON 1: JSON1 = { "person": { "firstName": "" }, "products": { "packName": "", "packSize": "" } } JSON 2的字段比JSON 1多: JSON2 = { "person": { "firstName": "Ahmed", "job": "Doctor" }, "products": { "packName": "antibiotic", "packSize": "lar
JSON1 = {
"person": { "firstName": "" },
"products": { "packName": "", "packSize": "" }
}
JSON 2的字段比JSON 1多:
JSON2 = {
"person": { "firstName": "Ahmed", "job": "Doctor" },
"products": { "packName": "antibiotic", "packSize": "large" }
}
我想用JSON 2中相应的值填充JSON 1
{
"person": { "firstName": "Ahmed" },
"products": { "packName": "antibiotic", "packSize": "large" }
}
我试过几种方法,但都没有达到目的
var newObj = {};
var parsedJson1 = JSON.parse(tw.local.JSON1);
var parsedJson2 = JSON.parse(tw.local.JSON2);
var i;
for (i in parsedJson1) {
var key=i;
var subkey=i;
for (j in parsedJson2) {
var k=j;
var s=j;
if (key == k && subkey == s) {
newObj[key][subkey] = parsedJson2[j];
}
}
}
tw.local.stringifiedJSON = JSON.stringify(newObj);
下面是一个关于如何做到这一点的示例: 请注意,这假设如下:
- 迭代有效键(JSON1上的所有键)
- 对于每个有效键,将其添加到
并在有效的newObj
子键上迭代
- 将值从
复制到JSON2
newObj
const JSON1=`{
“人”:{“名字”:“},
“产品”:{“packName”:“packSize”:”}
}`;
常量JSON2=`{
“人”:{“名字”:“艾哈迈德”,“工作”:“医生”},
“产品”:{“包装名称”:“抗生素”,“包装尺寸”:“大型”}
}`;
const parsedJson1=JSON.parse(JSON1);
const parsedJson2=JSON.parse(JSON2);
const newObj={};
const validKeys=Object.keys(parsedJson1);
for(让我看看Object.keys(parsedJson1)){
if(newObj[i]==未定义){
newObj[i]={};
}
for(设j为Object.keys(parsedJson1[i])){
newObj[i][j]=parsedJson2[i][j];
}
}
log(JSON.stringify(newObj))代码>您应该使用递归遍历目标对象以获得健壮性。我格式化了代码以提高可读性
function getNode(obj, path) {
var ret = obj;
try {
// replace forEach with for-loop for browser compatibilities
path.forEach(function (p) {
ret = ret[p];
});
} catch (e) {
return undefined;
}
return ret;
}
function fillJSONWithAnother(target, source, path) {
if (!(target && source)) return target;
// Assign path as an empty array for first call
path = path || [];
// Get target node and source node for comparing
var targetValue = getNode(target, path);
var sourceValue = getNode(source, path);
// targetValue is not a leaf node (i.e. is Object), should traverse its children nodes
if (targetValue && typeof targetValue === "object") {
for (var key in targetValue) {
fillJSONWithAnother(target, source, path.concat([key]));
}
}
// targetValue is a leaf node (i.e. not Object) and source value exists, set corresponding value
else if (sourceValue !== undefined) {
var node = getNode(target, path.slice(0, path.length - 1));
node[path[path.length - 1]] = sourceValue;
}
return target;
}
// Test case
var obj1 = {
"person": {
"firstName": ""
},
"products": {
"packName": "",
"packSize": "l"
}
};
var obj2 = {
"person": {
"firstName": "Ahmed",
"job": "Doctor"
},
"products": {
"packName": "antibiotic",
"packSize": "large"
}
}
fillJSONWithAnother(obj1, obj2);
// {"person":{"firstName":"Ahmed"},"products":{"packName":"antibiotic","packSize":"large"}}
变量k,s,key和subkey的值是多少,您没有初始化它们if条件如何工作?key=i和k=j