2016-06-24 5 views
0

Ich habe ein JSON-Objekt Es kann verschachtelt werden und ich habe ein zweites Objekt mit Schlüssel/Wert-Paar. Ich möchte den Wert des zweiten Objekts durch den ersten ersetzen, indem ich den Schlüssel des jeweiligen Objekts abgleiche.Suche nach Schlüssel und Ersetzen durch Wert im verschachtelten JSON-Objekt

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" 
        } 
       } 
      } 
     } 
    } 

Sein mein Array

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

Ich habe viele Möglichkeiten ausprobiert [http://jsfiddle.net/FM3qu/7/][1] auf diese Weise ich in der Lage bin Lösung zu erhalten, in Jsfiddle, In meinem ausdrücklichen Antrag, wenn ich versuche, es zu verarbeiten, gibt mir ein leeres Objekt.

Ich möchte so etwas wie dieses

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

Danke

Antwort

1

Sie zunächst alle Verweise speichern könnten und dann zuweisen die Daten haben Sie.

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: '[email protected]', 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);

+0

Ich weiß nicht, was falsch gehen, aber es ist nicht –

+0

arbeiten Sie das Ergebnis oben nicht sehen? –

+0

Ja, ich sehe, lass mich Frage bearbeiten Ich habe mit meiner API zu kämpfen, wenn ich Ihren obigen Codefehler mit _TypeError ausführen: Kann die Eigenschaft 'DealerRef' von undefined_ –

1

Sie können durch firstObj laufen und ersetzen Schlüssel/Wert mit 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 
Verwandte Themen