javascript - 连接 JSON 属性

标签 javascript json

我正在使用 javascript,我想将两个 JSON 文件加入到一个包含所有属性的 JSON 对象中。现在这两个 JSON 文件有单独的信息,但我需要将它们合并起来。

Station Information JSON - 下面的示例:

{  
   "last_updated":1493307962,
   "ttl":10,
   "data":{  
      "stations":[  
         {  
            "station_id":"219",
            "name":"Central Square - East Boston",
            "short_name":"A32036",
            "lat":42.37454454514976,
            "lon":-71.03837549686432,
            "region_id":10,
            "rental_methods":[  
               "KEY",
               "CREDITCARD"
            ],
            "capacity":19,
            "eightd_has_key_dispenser":false
         },
         {  
            "station_id":"220",
            "name":"Test 1",
            "short_name":"Test 1",
            "lat":0,
            "lon":0,
            "rental_methods":[  
               "KEY",
               "CREDITCARD"
            ],
            "capacity":0,
            "eightd_has_key_dispenser":false
         }
      ]
   }
} 

Station Status JSON - 下面的示例:

{  
   "last_updated":1493308075,
   "ttl":10,
   "data":{  
      "stations":[
         {  
            "station_id":"219",
            "num_bikes_available":7,
            "num_bikes_disabled":1,
            "num_docks_available":11,
            "num_docks_disabled":0,
            "is_installed":1,
            "is_renting":1,
            "is_returning":1,
            "last_reported":1493283725,
            "eightd_has_available_keys":false
         },
         {  
            "station_id":"220",
            "num_bikes_available":0,
            "num_bikes_disabled":0,
            "num_docks_available":0,
            "num_docks_disabled":0,
            "is_installed":0,
            "is_renting":0,
            "is_returning":0,
            "last_reported":0,
            "eightd_has_available_keys":false
         }
      ]
   }
}

具体来说,我查看了这篇文章( How to join two json object in javascript, without using JQUERY ),但是这两个 JSON 文件的结构更复杂,所以我无法使其工作。

任何建议将不胜感激。

最佳答案

此代码的行为类似于第二个对象上的联接(但可以扩展以执行完整的外部联接)

它通过将字符串 _conflict 附加到键名称来处理冲突

我写这个是为了帮助您入门,但您必须对其进行自定义以支持您的确切结构

组合后的对象不再是列表,但具有与数组相同的索引。

var obj1 = {  
   "conflicting_key":1493307962,
   "concurrent_key":10,
   "data":{  
      "listOfEvents":[ 
         {  
            "event_id":219,
            "name":"Central Square - East Boston",
            "rental_methods":[  
               "KEY",
               "CREDITCARD"
            ],
            "capacity":19
         },
         {  
            "event_id":220,
            "name":"Test 1",
            "lat":0,
            "lon":0,
            "rental_methods":[  
               "KEY",
               "CREDITCARD"
            ],
            "capacity":0,
            "eightd_has_key_dispenser":false
         }
      ]
   }
};

var obj2 = {  
   "conflicting_key":1493308075,
   "concurrent_key":10,
   "data":{  
      "listOfEvents":[
         {  
            "event_id":219,
            "num_bikes_available":7,
            "num_bikes_disabled":1,
            "last_reported":1493283725,
            "eightd_has_available_keys":false
         },
         {  
            "event_id":220,
            "num_bikes_available":0,
            "num_bikes_disabled":0,
            "num_docks_available":0,
            "is_returning":0,
            "last_reported":0,
            "eightd_has_available_keys":false
         }
      ]
   }
};

function combine(obj1, obj2) {
  var combinedObject = Object.assign({}, obj1);
  for(var key in obj2) {
    if(typeof obj2[key] !== "object") {
      if(obj1[key] !== obj2[key]) {
        var keyName = key;
        if(key in obj1) {
          keyName = keyName + "_conflict";
        }
        combinedObject[keyName] = obj2[key];
      }
    } else {
      combinedObject[key] = combine(obj1[key], obj2[key]);
    }
  }
  return combinedObject;
}

console.log(combine(obj1, obj2));

关于javascript - 连接 JSON 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43662284/

相关文章:

javascript - 使用 API 分页

javascript - 连接到数据库时不显示 Google map

ruby-on-rails - 在 Rails 中使用 ActiveModel::Serializer - JSON 数据在 json 和索引响应之间不同

javascript - 循环遍历表以生成 json

javascript - Knockout.JS 自定义绑定(bind)。更新 foreach

javascript - 如何成功地将filemanager集成到tinyMCE中?

javascript - Blogger 上的延迟加载

javascript - 将变量从一个 html 文件传递​​到另一个

jquery - 使用 jQuery 将 JSON 附加到表单并提交

java - 将 XML 键值映射转换为 JSON 对象