2017-04-18 1 views
2

Ich brauche ein JSON-Daten unter Verwendung des JoltTransformJSON innerhalb Nifi zu verwandeln, hier bin mein spec, die ich für die Transformation bin mit:JoltTransformJSON Prozessor in Nifi (json ohne übergeordneten Tag)

[{ 
"operation": "shift", 
"spec": { 
    "*": { 
     "Header": { 
      "readOn": "created_date_time", 
      "fileName": "readFile" 
     }, 
     "Data": { 
      "id": "Id", 
      "first_name": "First_Name", 
      "last_name": "Last_Name", 
     } 
    } 
}}] 

Mein Eingang Daten:

[{ 
"Header": { 
    "readOn": "2017/04/18 10:55:05", 
    "fileName": "sample1.csv", 
    "recordNum": 1 
}, 
"Data": { 
    "last_name": "Martin", 
    "id": 21, 
    "first_name": "Clarence" 
} 
}, { 
"Header": { 
    "readOn": "2017/04/18 10:55:05", 
    "fileName": "sample.csv", 
    "recordNum": 2 
}, 
"Data": { 
    "last_name": "Graham", 
    "id": 22, 
    "first_name": "Walter" 
} 
}] 

Ausgang, was ich bin immer:

{ 
"created_date_time": ["2017/04/18 10:55:05", "2017/04/18 10:55:05"], 
"readFile": ["sample1.csv", "sample2.csv"], 
"Id": [21, 22], 
"First_Name": ["Clarence", "Walter"], 
"Last_Name": ["Martin", "Graham"] 
} 

Die erforderliche Leistung:

[{ 
"recordNum": 1, 
"Header": { 
    "created_date_time": "2017/04/18 10:55:05", 
    "readFile": "getusroi.csv" 
}, 
"Data": { 
    "Last_Name": "Martin", 
    "Id": 21, 
    "First_Name": "Clarence" 
} 
}, { 
"recordNum": 2, 
"Header": { 
    "created_date_time": "2017/04/18 10:55:05", 
    "readFile": "getusroi.csv" 
}, 
"Data": { 
    "Last_Name": "Graham", 
    "Id": 22, 
    "First_Name": "Walter" 
} 
}] 

Frage: Kann mir jemand führen, wo alles, was ich die gewünschte transformierte Ausgabe zu erreichen, muss meine Ruck spec ändern.

Antwort

3

Der Trick besteht darin, den Baum zurück zu gehen, bis Sie zu dem Element im Array gelangen, dann können Sie auf diesen Index im Ziel verweisen. Versuchen Sie, diese Spezifikation:

[ 
    { 
    "operation": "shift", 
    "spec": { 
     "*": { 
     "Header": { 
      "recordNum": "[&2].recordNum", 
      "readOn": "[&2].&1.created_date_time", 
      "fileName": "[&2].&1.readFile" 
     }, 
     "Data": { 
      "id": "[&2].&1.Id", 
      "first_name": "[&2].&1.First_Name", 
      "last_name": "[&2].&1.Last_Name" 
     } 
     } 
    } 
    } 
] 
+0

dank @ mattyb..just einer kleinen Abfrage, sagen, wenn alle wollen, um die Daten (Header + Data) in einem neuen Schlüssel, der in der Eingabe nicht da ist, habe ich einen Join müssen neue Spezifikation für das in der Kette .. z - "Record": {"readOn": '' "," fileName ":" ".... etc} – Ranjan

+0

Wenn Sie die Felder in Header und Data in einem Feld namens Record kombinieren möchten, können Sie & 1 durch ersetzen Aufzeichnung – mattyb

Verwandte Themen