cancel
Showing results forย 
Search instead forย 
Did you mean:ย 

JSON Array transformation

SriVinayaga
New Contributor II

Hi All,

I am in requirement to transform JSON Array Object to a simple JSON Object with values in the array as below. I have thought and nothing striking to my mind. Hence any help will be appreciated. Please let me know if this is first doable in Snaplogic.

Input:
[
{
โ€œBrandDataโ€: [
{
โ€œSourceโ€: โ€œSFโ€,
โ€œSourceBrandโ€: โ€œCOKEโ€,
โ€œBrandโ€: โ€œ01โ€
},
{
โ€œSourceโ€: โ€œSAPโ€,
โ€œSourceBrandโ€: โ€œ11โ€,
โ€œBrandโ€: โ€œ26โ€
},
{
โ€œSourceโ€: โ€œAS400โ€,
โ€œSourceBrandโ€: โ€œ12โ€,
โ€œBrandโ€: โ€œ12โ€
}
]
}
]

Output:
{
BrandData:
{
โ€œSF-COKEโ€: โ€œ01โ€,
โ€œSAP-11โ€: โ€œ26โ€,
โ€œAS400-12โ€: โ€œ12โ€,
}
}

Please note the objects withing BrandData after transformation is based on the values of โ€œSourceโ€+โ€œ-โ€+โ€œSourceBrandโ€ and the value is โ€œBrandโ€. Each array value will have one value in the transformed output.

Please let me know how to proceed on this.

Thanks and regards,
Sri

1 ACCEPTED SOLUTION

tstack
Former Employee

Youโ€™re looking for the toObject() method on arrays. The method takes two callbacks, one to turn the array element into the key and one to turn the element into the value. I think the following will do what you want:

$BrandData.toObject(elem => elem.Source + "-" + elem.SourceBrand, elem => elem.Brand)

Iโ€™m also attaching an example pipeline with this expression.
ArrayToObject_2019_07_26.slp (3.9 KB)

View solution in original post

9 REPLIES 9

SriVinayaga
New Contributor II

Also BrandData in the output shouldnt be within quotes.

SriVinayaga
New Contributor II

Yes Tim, we will write it to a file.

The idea is to use the file as an expr library for transformation. This file is expected to be updated once a day and other pipelines will use this expr library file like a lookup. If the left value in the exprlib file matches with the input field value, it is expected to transform to the right value.

Ah, okayโ€ฆ In that case, itโ€™s okay if the property name is in quotes, either way is acceptable.

As for writing out just the document and not an array of docs, try selecting the โ€œFormat each documentโ€ option in the JSONFormatter.

Hi @tstack

I have a similar requirement here. But my input to JSON formatter snap is the output from union snap and it has many segments and not one. In that case with multiple segments how can I remove square bracket and an extra curly bracket.

Thanks,
Abinaya

Would you be able to provide an example pipeline?

One thing to try might be the GroupByN snap. If you set the count to zero, it will gather all input documents into a single output document.