2016-03-30 3 views
3

Ich habe folgendes JSON Objekt:Wie fügt man zu jedem JSON-Objekt in JavaScript ein JSON-Array hinzu?

{ 
    "status": "CREATED", 
    "overrides": { 
    "name": "test_override" 
    }, 
    "package_name": "test", 
    "name": "app1", 
    "defaults": { 
    "job": { 
     "example": { 
     "executors_num": "2", 
     "freq_in_mins": "180", 
     "executors_mem": "256M", 
     "job_name": "batch_example" 
     } 
    } 
    } 
} 

Ich möchte wie dies die oben JSON Objekt etwas konvertieren. Im Grunde ein Array in den jedes verschachtelte Objekt

{ 
    "children": [ 
    { 
     "status": "CREATED" 
    }, 
    { 
     "obj": "overrides", 
     "children": [ 
     { 
      "name": "test_override" 
     } 
     ] 
     }, 
     { 
      "package_name": "test" 
     }, 
     { 
      "name": "app1" 
     }, 
     { 
      "obj": "defaults", 
      "children": [ 
      { 
      "obj": "job", 
      "children": [ 
      { 
      "obj": "example", 
      "children": [ 
      { 
       "executors_num": "2", 
       "freq_in_mins": "180", 
       "executors_mem": "256M", 
       "job_name": "batch_example" 
      }] 
      }] 
     }] 
     } 
    ] 
} 

Hier ist, was ich in Bezug auf die Code haben:

function traverse(o, d) { 
    for (i in o) { 
    if (typeof(o[i])=="object") { 
     console.log(i, o[i]); 
     // considering only 'default' obj for now 
     if(i === 'defaults') { 
     d.children.push({obj: i, "children" :[ o[i] ]}); 
     } 
     traverse(o[i], d); 
    } 
    } 
    return d; 
} 

ich mit diesem am Ende statt:

{"children":[{"obj":"defaults", 
"children":[{"job":{"example": 
{"executors_num":"2","freq_in_mins":"180","executors_mem":"256M","job_name":"batch_example"}}}]}]} 

Aber ich zu sein scheinen geschlagen, nicht sicher, wie das Array children zu jedem verschachtelten Objekt hinzugefügt werden soll. Irgendwelche Zeiger?

+1

Was genau das Problem ist? Irgendwelche Fehlermeldungen? –

+0

Ich bin nicht in der Lage, herauszufinden, wie Sie das Array zu jedem verschachtelten Objekt hinzufügen. Ich habe am Ende: '{" Kinder ": [{" Obj ":" defaults "}, {" Kinder ": [{"job": {"example": {"executors_num": "2", "freq_in_mins": "180", "executors_mem": "256M", "job_name": "batch_beispiel"}}}]}]} ' – Pavan

+0

Bitte aktualisieren Sie Ihr Beispiel mit dem Code aus Ihrem Kommentar. – whipdancer

Antwort

0

der folgende Code ist eine rekursive Funktion, wenn der Objektschlüssel überprüft ein Objekt ist, und wenn ja seine Forderung es selbst

var data = { 
 
    "status": "CREATED", 
 
    "overrides": { 
 
    "name": "test_override" 
 
    }, 
 
    "package_name": "test", 
 
    "name": "app1", 
 
    "defaults": { 
 
    "job": { 
 
     "example": { 
 
     "executors_num": "2", 
 
     "freq_in_mins": "180", 
 
     "executors_mem": "256M", 
 
     "job_name": "batch_example" 
 
     } 
 
    } 
 
    } 
 
} 
 

 
function toArray(obj){ 
 
    var res = {children:[]} 
 
    Object.keys(obj).forEach(function(key){ 
 
    var childObj = {}; 
 
     
 
     if(typeof obj[key] === 'object'){ 
 
     childObj[key] = toArray(obj[key]) 
 
     } 
 
     else{ 
 
     childObj[key] = obj[key] 
 
     } 
 
    res.children.push(childObj) 
 
    }) 
 
    return res; 
 
} 
 

 
document.write(JSON.stringify(toArray(data)))

+0

nicht genau die Antwort, die ich suchte .. Es fügt ein einzelnes Element als JSON-Objekt .. Stattdessen sollte es ein Kind des Eltern-Array werden . – Pavan

0

Ein weiteren Vorschlag, der bei den Kindern für jede Eigenschaft ein eigenes Objekt fügt Array.

function organize(object, result, key) { 
 
    if (typeof object === 'object') { 
 
     result.obj = key; 
 
     result.children = []; 
 
     Object.keys(object).forEach(function (k) { 
 
      var o = {}; 
 
      result.children.push(o); 
 
      organize(object[k], o, k); 
 
     }); 
 
    } else { 
 
     result[key] = object; 
 
    } 
 
} 
 

 
var object = { "status": "CREATED", "overrides": { "name": "test_override" }, "package_name": "test", "name": "app1", "defaults": { "job": { "example": { "executors_num": "2", "freq_in_mins": "180", "executors_mem": "256M", "job_name": "batch_example" } } } }, 
 
    newObject = {}; 
 

 
organize(object, newObject) 
 
document.write('<pre>' + JSON.stringify(newObject, 0, 4) + '</pre>');

Verwandte Themen