Skip to main content
fisblack
Bronze ⭐️⭐️⭐️
October 30, 2024
Question

jolt transform ( add array elements to a different existing object )

Hello , can anyone help with a spec to transform this JSON input to the desired output .

JSON INPUT

==========

{
"courseId": "xxx"
}

== desired output json ==

[

{

"courseId": "xxx",
"courseSubCategory": 1

},

{

"courseId": "xxx",
"courseSubCategory": 2

},

{

"courseId": "xxx",
"courseSubCategory": 3

}

]

2 replies

SAMSAL
Platinum ⭐️⭐️⭐️
October 30, 2024

Hi @fisblack ,

Welcome to the community.

Your transformation is kind of odd. Usually transformation is driven by existing values or structure  even when generating new fields with defaults. I have never seen a case where newly generated values drive transformation of existing ones. I assume you are getting the list of courseSubCategory from somewhere and the  script is rather dynamic utilizing some expression language & attributes. if you provide some context to how the list is coming about and what are you trying to achieve , maybe we can provide you with more accurate solution.

There are multiple ways of solving your problem as is - assuming you always want to replicate an existing field(s) against  newly generated 3 elements array with default  values of 1,2&3- , here is one of them:

[
{
"operation": "shift",
"spec": {
"*": "existing.&",
"#1|#2|#3": "courseSubCategory"
}
},
{
"operation": "shift",
"spec": {
"courseSubCategory": {
"*": {
"@(2,existing)": "[&1]",
"@": "[&1].courseSubCategory"
}
}
}
}
]

If you want to make this more dynamic in terms of number of "courseSubCatgory", you can construct the array assignment string "#1|#2|#3" in some upstream processors and store the value as flow attribute (let says its called the same) , then you can make it more dynamic by using the flowfile attribute where the assignment of the courseSubCategory in the first shift will look like this:

"${courseSubCategory}": "courseSubCategory"

Hope that helps. If it does help, please accept the solution.

Thanks

 

 

 

Translate
DianaTorres
Community Manager
Community Manager
November 6, 2024

@fisblack Has the reply helped resolve your issue? If so, please mark the appropriate reply as the solution, as it will make it easier for others to find the answer in the future.  Thanks.

Translate
Regards, Diana Torres, Senior Community Moderator