简体   繁体   English

在嵌套的json对象中按键查找并按值替换

[英]Find by key and replace by value in nested json object

I have an json object It can be nested and I have an second object containing key/value pair. 我有一个json对象,它可以嵌套,还有另一个包含键/值对的对象。 I want to replace the second object's value by first one by matching key both object's key. 我想通过将两个对象的键都匹配来将第一个对象的值替换为第一个。

let firstObj = {
        "enquiry": {
            "Lead": {
                "SubLead": {
                    "DealerRef": "test",
                    "DealerFloor": "test",
                    "Region": "test",
                    "Source": {
                        "Special": "test",
                        "TestDrive": "test",
                        "TradeIn": "test",
                        "Finance": "test"
                    }
                },
                "Contact": {
                    "Info": {
                        "FirstName": "test",
                        "Surname": "test",
                        "Email": "test",
                        "OfficePhone": "test",
                        "CellPhone": "test"
                    }
                },
                "Seeks": {
                    "Stock": {
                        "Used": "test",
                        "Brand": "test",
                        "Model": "test",
                        "StockNr": "test"
                    }
                }
            }
        }
    }

Its my array 它是我的数组

let secondObj = {
  DealerRef: '18M',
  DealerFloor: 'UCP',
  Region: 'Western Cape',
  FirstName: 'abc',
  Surname: 'xyz',
  Email: 'test@ctm.co.za',
  OfficePhone: '2343243',
  CellPhone: '2343243',
  Used: '1',
  Brand: 'QAE',
  Model: 'test',
  StockNr: 'SEDONA',
  Special: '2013 Kia Sedona',
  TestDrive: '0',
  TradeIn: '0',
  Finance: '0' 
};

I have tried many ways [ http://jsfiddle.net/FM3qu/7/][1] this way i'm able to get solution in Jsfiddle, In my express application when I try to process it gives me an empty object. 我已经尝试了许多方法[ http://jsfiddle.net/FM3qu/7/][1],这样我就可以在Jsfiddle中获得解决方案。在我的快速应用程序中,当我尝试处理它时,我得到了一个空对象。

I want something like this 我想要这样的东西

"enquiry": {
  "Lead": {
      "SubLead": {
          "DealerRef": "18M",
          "DealerFloor": "UCP",
          "Region": "Western Cape"....

Thank you 谢谢

You can iterate through firstObj and replace key/value with secondObj 您可以遍历firstObj并将键/值替换为secondObj

function iterateObj(obj){
  for(var key in obj){
    if(obj.hasOwnProperty(key)){
      if(typeof obj[key] === 'object'){
        iterateObj(obj[key]);
      }
      else if(secondObj[key]!=undefined){
        obj[key] = secondObj[key]
      }
    }
  }
}
iterateObj(firstObj)

console.log(firstObj); // this will give proper results

You could first save all references and then assign the data, you have. 您可以先保存所有引用,然后分配数据。

 function update(object, data) { function getAllKeys(o) { Object.keys(o).forEach(function (k) { if (typeof o[k] === 'object') { return getAllKeys(o[k]); } keys[k] = o; }); } var keys = Object.create(null); getAllKeys(object); Object.keys(data).forEach(function (k) { if (keys[k] && k in keys[k]) { // check if key for update exist keys[k][k] = data[k]; } }); } var object = { "enquiry": { "Lead": { "SubLead": { "DealerRef": "test", "DealerFloor": "test", "Region": "test", "Source": { "Special": "test", "TestDrive": "test", "TradeIn": "test", "Finance": "test" } }, "Contact": { "Info": { "FirstName": "test", "Surname": "test", "Email": "test", "OfficePhone": "test", "CellPhone": "test" } }, "Seeks": { "Stock": { "Used": "test", "Brand": "test", "Model": "test", "StockNr": "test" } } } } }, data = { DrNo: 666, DealerRef: '18M', DealerFloor: 'UCP', Region: 'Western Cape', FirstName: 'abc', Surname: 'xyz', Email: 'test@ctm.co.za', OfficePhone: '2343243', CellPhone: '2343243', Used: '1', Brand: 'QAE', Model: 'test', StockNr: 'SEDONA', Special: '2013 Kia Sedona', TestDrive: '0', TradeIn: '0', Finance: '0' }; update(object, data); console.log(object); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM