我尝试以特定方式将元素添加到以下JSON:
var data = [{"name":"google",
"ip":"10.10.10.01",
"markets":[{"name":"spain","county":"6002,6017,6018,6019,6020"},
{"name":"france","county":"6003,6005,6006,6007,6008,6025,6026,6027,6028,6029"},
{"name":"japan","county":"6004,6021,6022,6023,6024"},
{"name":"korea","county":"6000,6013,6014,6015,6016"},
{"name":"vietnam","county":"6001,6009,6010,6011,6012"}]},
{"name":"amazon",
"ip":"10.10.10.02",
"markets":[{"name":"usa","county":"10000,10001,10002,10003,10004,10005"}]},
{"name":"yahoo",
"ip":"10.10.10.03",
"markets":[{"name":"japan","county":"10000"}]}];
我想将此元素添加到json:
newData = [{"name":"amazon",
"ip":"10.10.10.02",
"markets":[{"name":"mexico","county":"9000"}]}];
结果可能就是这样:
var data = [{"name":"google",
"ip":"10.10.10.01",
"markets":[{"name":"spain","county":"6002,6017,6018,6019,6020"},
{"name":"france","county":"6003,6005,6006,6007,6008,6025,6026,6027,6028,6029"},
{"name":"japan","county":"6004,6021,6022,6023,6024"},
{"name":"korea","county":"6000,6013,6014,6015,6016"},
{"name":"vietnam","county":"6001,6009,6010,6011,6012"}]},
{"name":"amazon",
"ip":"10.10.10.02",
"markets":[{"name":"usa","county":"10000,10001,10002,10003,10004,10005"},
{"name":"mexico","county":"9000"}]},
{"name":"yahoo",
"ip":"10.10.10.03",
"markets":[{"name":"japan","county":"10000"}]}];
我试图使用:
$.extend(data.markets, newData)
$.extend(true, data, newData);
//这仅适用于每个元素都是新元素的情况。
但是没有什么能像我假装的那样起作用。
有人能给我一个解决方案吗?
提前致谢。
答案 0 :(得分:2)
您有一个对象数组,其中每个对象如下所示:
var item = {"name":"...",
"ip":"...",
"markets":[ /*some objects here*/];
}
那么为什么不创建自定义方法来插入元素呢?如果存在具有相同名称和ip的项目,它可以在数组中搜索,然后:
$.extend(true, data[i],newData)
$.extend(true, data,newData)
答案 1 :(得分:2)
您还没有创建JSON,您已经创建了一个JavaScript文字对象。
您可以通过
添加此特定的新数据data[1].markets.push({"name":"mexico","county":"9000"})
因为您正在处理javascript对象,所以您可以编写一个函数来检查data [n]和push
数据是否存在。
答案 2 :(得分:0)
从another answer窃取一些代码:
$.each(data, function(item){
if(item.name == newData[0].name && item.ip == newData[0].ip) {
item.markets.push.apply(item.markets, newData[0].markets);
}
}
这假设你知道新对象中的所有市场项目都与现有市场项目不同 - 否则你必须做一个嵌套的foreach或其他东西。如果你可以稍微改变对象的符号,你可以考虑using a dictionary-like object for Markets使它更清洁。
事实上,从关联数组中更改data
也可能适用于此。然后你可以轻松检查存在:
if(data[myNewDataName]){
//add to markets
} else {
data[myNewDataName] = myNewData;
}