2016-09-13 1 views
1

Eingang JSON, die I wird zur Transformation haben zu transformieren, wie folgt:kann keine JSON-Objekt in einem Array von Objekten unter Verwendung von JOLT JSON Bibliothek

{ 
    "Business": [ 
    { 
     "Label": "Entertainment", 
     "category": "Advert", 
     "weight": "", 
     "types": [ 
     "T1", 
     "T2" 
     ] 
    }, 
    { 
     "Label": "FMCG", 
     "category": "Campaign", 
     "weight": "", 
     "types": [ 
     "T9", 
     "T10" 
     ] 
    } 
    ] 
} 

Erwartete Leistung:

{ 
    "Business": [ 
    { 
     "Label": "Entertainment", 
     "category": "Advert", 
     "weight": "", 
     "types": "T1" 
    }, 
    { 
     "Label": "Entertainment", 
     "category": "Advert", 
     "weight": "", 
     "types": "T2" 
    }, 
    { 
     "Label": "FMCG", 
     "category": "Campaign", 
     "weight": "", 
     "types": "T9" 
    }, 
    { 
     "Label": "FMCG", 
     "category": "Campaign", 
     "weight": "", 
     "types": "T10" 
    } 
    ] 
} 

ich die verschiedenen versucht habe, JsonSpecs, die auf der JOLT github-Hilfeseite bereitgestellt werden. Aber ich kann das nicht lösen. Jede Hilfe oder Hinweise werden geschätzt.

+1

ist 'einen Tippfehler in der Eingabe/Ausgabe-Proben typess'? – JAAulde

+1

Ja, es war ein Tippfehler. Ich habe es jetzt korrigiert. – abb

Antwort

5

Sie müssen zwei Schichtoperationen durchführen.

Sie wollen „Duplikat“ das Label und Kategorie auf, wie viele Einträge, die Sie in „Typen“ Array. Also mach das zuerst in ein temporäres "BizArray".

Notieren Sie auch, welcher "Typ" mit diesem doppelten Label und Kategorie in einem temporären "typeArray", das die gleichen Indizes wie das BizArray hat.

In der zweiten Schicht, „join“ die beiden parallelen Anordnungen, „bizArray“ und „typesArray“ Ihre endgültige Anordnung zu erhalten.

Spec

[ 
    { 
    "operation": "shift", 
    "spec": { 
     "Business": { 
     "*": { // business array 
      "types": { 
      "*": { // type array 
       "@2": "bizArray[]", // make a copy of the whole biz object 
       "@": "typesArray[]" 
      } 
      } 
     } 
     } 
    } 
    }, 
    { 
    "operation": "shift", 
    "spec": { 
     "bizArray": { 
     "*": { // bizArray index 
      "Label": "Business[&1].Label", 
      "category": "Business[&1].category", 
      "weight": "Business[&1].weight" 
     } 
     }, 
     "typesArray": { 
     "*": "Business[&].types" 
     } 
    } 
    } 
] 
+0

Danke Milo, das funktioniert! Aber ich verstehe nicht, wie das funktioniert. Die Dokumentation zu dieser Bibliothek ist so verworren, dass sie für mich keinen Sinn ergibt. Ich denke, ich sollte eine andere Bibliothek versuchen. – abb

+0

Guter Job! Ich habe Jolt nie benutzt, aber ich habe mir diese letzte Nacht angesehen und ein paar Stunden damit verbracht, die Docs zu lesen und mit der Demo herumzuspielen. Ich war sehr nah dran (ich wusste, dass es zwei Shifts brauchte), aber ich konnte einfach kein korrektes Endprodukt bekommen. Jolt ist interessant, um es gelinde auszudrücken! – JAAulde

+0

Danke. Es ist eine komplexe Sache zu doc. A) Jede Operation (absichtlich) kann eine andere DSL haben, denn das ist der springende Punkt. Nämlich, dass ein einzelnes DSL, um sie alle zu beherrschen, im Grunde nur Java ist. B) seine rekursive, und alle Operationen arbeiten ein Feld zu einer Zeit. Somit sind "aggregierte" Dinge und der Umgang mit Arrays "hart"/"stumpf". –

Verwandte Themen