Forum Discussion
Hi @arvindnsn,
You can try to filter out documents that have “error” keys, and later on to split them using JSON Splitter Snap.
$result.filter(x => x.hasPath("error"))
Let me know if this helps you.
BR,
Aleksandar.
- vgautam642 years agoNew Contributor III
Anyone?
- vgautam642 years agoNew Contributor III
- Supratim2 years agoContributor III
vgautam64 As I can't copy your json, have created my own, you can use it-
Data ==>
{"carList": [{"color": "purple","type": "minivan","debit_amount": 50,"credit_amount": 7},{"color": "red","type": "station wagon","debit_amount": 100,"credit_amount": 5}, {"color": "black","type": "toyota","debit_amount": 200,"credit_amount": 5},{"color": "blue","type": "Maruti","debit_amount": 300,"credit_amount": 5}]}1. mapper :$carList.map((val,index)=>{"sum_debit_amount": jsonPath($, "carList[*].debit_amount").reduce((cur,acc)=>cur+acc),"sum_credit_amount" : jsonPath($, "carList[*].credit_amount").reduce((cur,acc)=>cur+acc)}.extend(val)).shift()- vgautam642 years agoNew Contributor III
Hi Supratim,
Thanks for the providing a solution. I tried to validate the expression with the data I have and it seems to work when I validate the pipe. Strangely though, I observe that when I execute (not validate) the pipeline, the mapper that holds the expression only seem to process 50 records and gets stuck processing the 51st doc. But when I validate the pipe I am able to see the preview of 148 documents.
Any idea why this would happen?
- bojanvelevski2 years agoValued Contributor
Hi vgautam64 ,
Try the following expression in a mapper:
$group.reduce((acc,curr,ind)=> acc.extend(curr.mapKeys((val,key)=>key+ind)),{})
Let me know what you think.
Regards,
Bojan
- koryknick2 years agoEmployee
vgautam64 - I believe this solves your question in the simplest way I can think of. Use a Mapper snap with the following configuration:
It appears to me that you only need the field elements and values from the first group element: $group[0]
The two jsonPath statements are simply pulling all values for the Debit and Credit Amounts into an array of numbers
Finally, the Array.reduce() method is used to aggregate that list of numbers into a final total.
Hope this helps!