2016-07-29 5 views
-2

Aus Gründen, die ich eher nicht in die Struktur eines Js-Skript, das auf Java Nashorn innerhalb einer Java-App läuft jetzt hat eine andere Struktur. Da das Java-Team nicht in der Lage ist, ein bereits vorhandenes Array von Objekten zu konvertieren, kommt es nicht als Objekt von Objekten. Die Komplexität hier ist, dass es sehr weit wie 5 -6 Ebenen verschachtelt ist. Anstatt den direkten Ansatz zu verwenden, den ich für einige der App verwendet habe, um sie zu konvertieren, wäre es großartig, einen Weg zu einer rekursiven Lösung zu finden. HierObject Objekt zu Array von Objekten

ist, was die Struktur aussehen kann als die Lösung für die Schlüsselnamen Agnostiker sein sollte:

{ 
    "abc": { 
    "items": { 
    "0": { 
     "cde": "123456", 
     "fgh":{ 
      "0": {"ijk":"987654"} 
     } 
    }, 

    .... 
It goes on and on. 
} 

} 
} 

Sorry für den nicht-hübschen Druck JSON

Ausgang erwartet:

{ 
    "abc": { 
    "items": [ 
    { 
     "cde": "123456", 
     "fgh":[{"ijk":"987654"}], 

    .... 
It goes on and on. 
    } 

] 
} 

Ich war in der Lage, _.toArray Unterstrich und meine eigene Funktion zu verwenden, die ich seit Unterstrich Lösung perfe entfernt habe ct.

Irgendwelche Ratschläge? Irgendwelche Lösungen verfügbar? unterstreichen?

+1

Es ist nicht klar, was Sie die Ausgabe wollen wie eigentlich zu suchen. Aber es sieht wie eine JSON-Repräsentation von verschachtelten Arrays aus, was nicht so aussieht, als ob es zu schwierig sein sollte, zumindest zu beginnen - was hast du bisher und was ist falsch daran? –

+0

Entschuldigung. Der Teil, wo es "Elemente": {"0": {...}} sollte ein Array wie "Elemente": [{"Cde": "123456", ...}] – nickmenow

Antwort

1

Dies soll Ihnen helfen, die ersten Schritte .. bitte meine Kommentare lesen Sie die Lösung zur Verbesserung der

//test object 
var json = { 
    "abc": { 
     "items": { 
      "0": { 
       "cde": "123456", 
       "fgh":{ 
        "0": {"ijk":"987654"} 
       } 
      }, 
     }, 
    }, 
}; 

//check array: this code should be customized to your needs- I only check for numbers here 
var isArray = function (obj) { 
    if (typeof obj !== 'object') 
     throw new Error('invalid argument'); 
    for (var m in obj) 
     if (obj.hasOwnProperty(m) && !/^\d+$/.test(m)) //test if key is numeric 
     return false; 

    return true; 
} 

//recursive parse-function 
var parse = function (obj, node) { 
    if (typeof obj !== 'object') 
     return obj; //break condition for non objects 

    if (isArray(obj)) { 
     node = node || []; 
     for (var m in obj) 
      node.push(parse(obj[m])); 
    } 
    else { 
     node = node || {}; 
     for (var m in obj) 
      node[m] = parse(obj[m]); 
    } 

    return node; 
} 

//run 
var newObj = parse(json); 
console.log(JSON.stringify(newObj)); 

jsfiddle: https://jsfiddle.net/oh4ncbzc/

+0

Vielen Dank. Dies funktionierte perfekt für meinen Zweck. Ich habe eine Menge für dieses Skript gelernt, da der Ansatz einfacher und besser war als meine Versuche. – nickmenow

+0

Gern geschehen. – Wolfgang

Verwandte Themen