Created 12-09-2024 06:54 PM
Hi Everyone,
Struggling with transforming the JSON flow file, would appreciate help from the community!
input json flow file:
[{
"firstName": "John",
"LastName": "Malkovich",
"MiddleName": "J",
"nameType": {
"type1": "Other"
"type2": "Primary"
}
}, {
"firstName": "Johnny",
"LastName": "Cage",
"MiddleName": "M",
"nameType": {
"type1": "Basic"
"type2": "Primary"
}
}
]
expected output json flow file:
{
"fileName": "file.xml",
"count": "2",
"individuals": [{
"firstName": "John",
"LastName": "Malkovich",
"MiddleName": "J",
"nameType": {
"type1": "Other"
"type2": "Primary"
}
}, {
"firstName": "Johnny",
"LastName": "Cage",
"MiddleName": "M",
"nameType": {
"type1": "Basic"
"type2": "Primary"
}
}
]
}
Jolt specification :
[ { "operation": "default", "spec": { "fileName": "file.xml"", "count": "=2" } }, { "operation": "shift", "spec": { "*": { "@": "individuals[]" } } } ]
gettingError:
TransformException: The Spec provided can not handle input that is a top level Json Array.
Created 12-10-2024 05:50 AM
Hi @FreddyM ,
It seems like the default spec doesnt like it when the root object is an array. The good news is that there are other ways to assign default values , for example in the shift spec using # on the left hand side allows you to set default as follows:
[
{
"operation": "shift",
"spec": {
"#file.xml": "fileName",
"#2": "count",
"*": {
"@": "individuals[]"
}
}
}
]
If you have the fileName and the count values stored in flow file attribute you can reference them using expression language as in :
"#${fileNameAttribute}":"fileName"
Hope that helps. Please accept solution if it does.
Thanks
Created 12-10-2024 05:50 AM
Hi @FreddyM ,
It seems like the default spec doesnt like it when the root object is an array. The good news is that there are other ways to assign default values , for example in the shift spec using # on the left hand side allows you to set default as follows:
[
{
"operation": "shift",
"spec": {
"#file.xml": "fileName",
"#2": "count",
"*": {
"@": "individuals[]"
}
}
}
]
If you have the fileName and the count values stored in flow file attribute you can reference them using expression language as in :
"#${fileNameAttribute}":"fileName"
Hope that helps. Please accept solution if it does.
Thanks
Created 12-10-2024 07:38 AM
@SAMSAL Solution worked like a charm, special thank you for additional hint on passing attribute to json payload.
Thank you.