03-17-2021 04:05 AM
Hi Everyone,
I have a record, that has a field of CSVs. I split the CSVs using the JSON splitter, and then use a group by fields snap to create my objects which have the recordId, and the individual values from the CSV field. I end up with what I need ( {Id:1, Roof:true}, {Id:1, doors:true}), but then I need to have the object created with the options as fields… So {Id:1, Roof:true, doors:true}. Sometimes, there’s no roof attribute, or doors attribute. There could be 1 field in the original CSV field, there could be 10.
03-18-2021 07:45 AM
Hi chrisbodman,
If I understand your problem, you’re looking to take the output of a Group By Fields and flatten the grouping into a single object?
So in your example, this
{Id:1, Roof:true}, {Id:1, doors:true}
becomes
{Id:1, Roof:true, doors:true}
If that’s the case, than you could use this expression in a mapper.
jsonPath($, "$group[*]").reduce((accum, o) => accum.extend(o), {})
Essentially you’re doing a reduce
on the array to build a new object as the result. Here’s a break down of how it works:
jsonPath($, "$group[*]")
get the elements underneath $group
reduce((accum, o) => ..., {})
reduce the array of objects into a single object {}
accum.extend(o)
for each object in the array, extend the accumulating object with its membersHere’s a pipeline example you can use to play around with it. Let me know if this works.
reduce-example_2021_03_18.slp (4.7 KB)