按键合并JSON数据
Merge JSON Data by Key
我正试图合并几个JSON文件,我对天气数据,并试图找出最好的方法来做到这一点。我发现其他几个帖子只是连接JSON对象,或者在相同键的情况下,第二个JSON对象覆盖第一个JSON对象,等等,但没有按键合并它们。
下面是我正在使用的示例和我想要的输出。任何建议,这将是伟大的!
样本JSON0.json {
"1948": [
{
"Seattle": {
"city": "Seattle",
"data": {
"avg_dew_point": "34",
"avg_gust_wind": "",
"avg_max_temp": "45",
"avg_min_temp": "35",
"avg_precipitation": "0.00",
"avg_sea_level_pressure": "30.22",
"avg_temp": "40",
"avg_wind": "8"
},
"month": "1",
"state": "WA"
}
},
{
"Chicago": {
"city": "Chicago",
"data": {
"avg_dew_point": "10",
"avg_gust_wind": "",
"avg_max_temp": "25",
"avg_min_temp": "11",
"avg_precipitation": "0.00",
"avg_sea_level_pressure": "30.17",
"avg_temp": "18",
"avg_wind": "12"
},
"month": "1",
"state": "IL"
}
}
],
"1949": [
{
"Houston": {
"city": "Houston",
"data": {
"avg_dew_point": "45",
"avg_gust_wind": "",
"avg_max_temp": "61",
"avg_min_temp": "44",
"avg_precipitation": "0.00",
"avg_sea_level_pressure": "30.15",
"avg_temp": "53",
"avg_wind": "12"
},
"month": "1",
"state": "TX"
}
},
{
"Seattle": {
"city": "Seattle",
"data": {
"avg_dew_point": "25",
"avg_gust_wind": "",
"avg_max_temp": "38",
"avg_min_temp": "25",
"avg_precipitation": "0.00",
"avg_sea_level_pressure": "30.32",
"avg_temp": "31",
"avg_wind": "7"
},
"month": "1",
"state": "WA"
}
}
]
}
样本JSON1.json {
"1948": [
{
"Jacksonville": {
"city": "Jacksonville",
"data": {
"avg_dew_point": "45",
"avg_gust_wind": "",
"avg_max_temp": "61",
"avg_min_temp": "44",
"avg_precipitation": "0.00",
"avg_sea_level_pressure": "30.13",
"avg_temp": "53",
"avg_wind": "8"
},
"month": "1",
"state": "FL"
}
},
{
"Indianapolis": {
"city": "Indianapolis",
"data": {
"avg_dew_point": "13",
"avg_gust_wind": "",
"avg_max_temp": "34",
"avg_min_temp": "13",
"avg_precipitation": "0.00",
"avg_sea_level_pressure": "30.17",
"avg_temp": "24",
"avg_wind": "12"
},
"month": "1",
"state": "IN"
}
}
],
"1949": [
{
"San Jose": {
"city": "San Jose",
"data": {
"avg_dew_point": "",
"avg_gust_wind": "",
"avg_max_temp": "52",
"avg_min_temp": "33",
"avg_precipitation": "0.02",
"avg_sea_level_pressure": "",
"avg_temp": "43",
"avg_wind": ""
},
"month": "1",
"state": "CA"
}
},
{
"Jacksonville": {
"city": "Jacksonville",
"data": {
"avg_dew_point": "55",
"avg_gust_wind": "",
"avg_max_temp": "73",
"avg_min_temp": "54",
"avg_precipitation": "0.00",
"avg_sea_level_pressure": "30.21",
"avg_temp": "63",
"avg_wind": "5"
},
"month": "1",
"state": "FL"
}
}
]
}
样本combinedJSON.json {
"1948": [
{
"Seattle": {
"city": "Seattle",
"data": {
"avg_dew_point": "34",
"avg_gust_wind": "",
"avg_max_temp": "45",
"avg_min_temp": "35",
"avg_precipitation": "0.00",
"avg_sea_level_pressure": "30.22",
"avg_temp": "40",
"avg_wind": "8"
},
"month": "1",
"state": "WA"
}
},
{
"Chicago": {
"city": "Chicago",
"data": {
"avg_dew_point": "10",
"avg_gust_wind": "",
"avg_max_temp": "25",
"avg_min_temp": "11",
"avg_precipitation": "0.00",
"avg_sea_level_pressure": "30.17",
"avg_temp": "18",
"avg_wind": "12"
},
"month": "1",
"state": "IL"
}
},
{
"Jacksonville": {
"city": "Jacksonville",
"data": {
"avg_dew_point": "45",
"avg_gust_wind": "",
"avg_max_temp": "61",
"avg_min_temp": "44",
"avg_precipitation": "0.00",
"avg_sea_level_pressure": "30.13",
"avg_temp": "53",
"avg_wind": "8"
},
"month": "1",
"state": "FL"
}
},
{
"Indianapolis": {
"city": "Indianapolis",
"data": {
"avg_dew_point": "13",
"avg_gust_wind": "",
"avg_max_temp": "34",
"avg_min_temp": "13",
"avg_precipitation": "0.00",
"avg_sea_level_pressure": "30.17",
"avg_temp": "24",
"avg_wind": "12"
},
"month": "1",
"state": "IN"
}
}
],
"1949": [
{
"Houston": {
"city": "Houston",
"data": {
"avg_dew_point": "45",
"avg_gust_wind": "",
"avg_max_temp": "61",
"avg_min_temp": "44",
"avg_precipitation": "0.00",
"avg_sea_level_pressure": "30.15",
"avg_temp": "53",
"avg_wind": "12"
},
"month": "1",
"state": "TX"
}
},
{
"Seattle": {
"city": "Seattle",
"data": {
"avg_dew_point": "25",
"avg_gust_wind": "",
"avg_max_temp": "38",
"avg_min_temp": "25",
"avg_precipitation": "0.00",
"avg_sea_level_pressure": "30.32",
"avg_temp": "31",
"avg_wind": "7"
},
"month": "1",
"state": "WA"
}
},
{
"San Jose": {
"city": "San Jose",
"data": {
"avg_dew_point": "",
"avg_gust_wind": "",
"avg_max_temp": "52",
"avg_min_temp": "33",
"avg_precipitation": "0.02",
"avg_sea_level_pressure": "",
"avg_temp": "43",
"avg_wind": ""
},
"month": "1",
"state": "CA"
}
},
{
"Jacksonville": {
"city": "Jacksonville",
"data": {
"avg_dew_point": "55",
"avg_gust_wind": "",
"avg_max_temp": "73",
"avg_min_temp": "54",
"avg_precipitation": "0.00",
"avg_sea_level_pressure": "30.21",
"avg_temp": "63",
"avg_wind": "5"
},
"month": "1",
"state": "FL"
}
}
]
}
试试这个:
function mergeJson(target) {
for (var argi = 1; argi < arguments.length; argi++) {
var source = arguments[argi];
for (var key in source) {
if (!(key in target)) {
target[key] = [];
}
for (var i = 0; i < source[key].length; i++) {
target[key].push(source[key][i]);
}
}
}
return target;
}
演示:http://jsfiddle.net/4nfWp/1/
你可以这样称呼它:mergeJson({}, object1, object2, object3);
(有任意数量的参数)
在演示中,实际的调用位于Javascript的底部,因为我需要首先定义"JSON",而且它们很长。
更新:
如果使用underscorejs
,您可以使用以下命令:
var finalJson = {};
_.each(_.keys(json0,json1), function(key) {
finalJson[key] = _.flatten(_.zip(json0[key], json1[key]));
});
console.log(finalJson);
演示:http://jsfiddle.net/4nfWp/4/
这要归功于@djKianoosh,因为他想出了这个办法:)
相关文章:
- 无法使用变量访问数据 JSON
- 使用 ng-repeat解析不均匀数据/ json对象
- 在没有jsonp的情况下从另一个域获取数据(json格式)
- 如何获取带参数的数据json
- 如何在android中显示实时雅虎金融股票数据..json格式如下所示
- 使用 JavaScript 将数据 json 显示到网页中
- 高位图表来源于API数据(JSON)
- 使用动态数据json初始化同位素
- Django:将数据JSON从视图传递给javascript
- 存储配置数据 (json)
- 未捕获的SyntaxError:意外的标识符图像数据json
- 接收数据json/jquery
- Jquery数据表数据json
- 不能在cakephp中使用数组数据json
- 在不锁定浏览器的情况下,将大数据JSON从REST请求反序列化为对象
- 如何读取数据JSON格式数组的字符串数据
- 我有一个流星应用程序,需要从/public/_assets/results/mmresults读取数据.Json文件,在
- 数据json不显示在html
- 使用2个下拉列表创建2个并排的表行来比较数据- JSON
- 需要将复杂的json对象转换为合适的angularjs UI树数据json结构