03-09-2020 12:39 AM
Hi,
I need to know the ways of performing the restructuring of the JSON payload based on the requirement.for ex. quiz_id value we need to distribute to each type of question.
below are input and expected output need to achieve through snaplogic pipeline
input json
{
“quiz”: {
“quiz_id” : 123456789,
“sport”: {
“q1”: {
“question”: “Which one is correct team name in NBA?”,
“options”: [
“New York Bulls”,
“Los Angeles Kings”,
“Golden State Warriros”,
“Huston Rocket”
],
“answer”: “Huston Rocket”
}
},
“maths”: {
“q1”: {
“question”: “5 + 7 = ?”,
“options”: [
“10”,
“11”,
“12”,
“13”
],
“answer”: “12”
},
“q2”: {
“question”: “12 - 8 = ?”,
“options”: [
“1”,
“2”,
“3”,
“4”
],
“answer”: “4”
}
}
}
}
Output Json
{
“quiz”: {
“sport”: {
“q1”: {
“question”: “Which one is correct team name in NBA?”,
“options”: [
“New York Bulls”,
“Los Angeles Kings”,
“Golden State Warriros”,
“Huston Rocket”
],
“answer”: “Huston Rocket”,
“quiz_id” : 123456789
}
},
“maths”: {
“q1”: {
“question”: “5 + 7 = ?”,
“options”: [
“10”,
“11”,
“12”,
“13”
],
“answer”: “12”,
“quiz_id” : 123456789
},
“q2”: {
“question”: “12 - 8 = ?”,
“options”: [
“1”,
“2”,
“3”,
“4”
],
“answer”: “4”,
“quiz_id” : 123456789
}
}
}
}
03-09-2020 10:08 AM
I think you can do this with a Mapper since the “Target Path” is a JSON-Path. Using a path with some wildcards (*
), you can spread the quiz_id
value across all the questions. Here’s a suggested Mapper configuration:
The first row copies the quiz_id
to all of the categories (e.g. “sports”) and then the questions (e.g. “q1” and “q2”). Since I set the Mapper to pass through the input doc, the second row deletes quiz_id
from the input.
Community7038_2020_03_09.slp (3.8 KB)
03-18-2020 09:34 AM
Thanks a lot @tstack it worked great.
below is the actual case which I wanted to implement using this logic but it doesn’t seem to be working
Scenario to be implemented:
with reference to JSON payload (refer attached pipeline), the item array has field “lineItemId”, this field i need to be mapped inside AccountingCodingBlockAssignment below ProductRecipientPartyInternalID field.
here if for same lineItemId, there are more then one objects under AccountingCodingBlockAssignment, then it should map respective the “lineItemId” below each objects ProductRecipientPartyInternalID field.
i have kept one expected json snap in pipeline for better understanding, archiving this would help us to design desired complex mappings.
04-05-2020 05:23 AM
Hi,
I have developed logic to archive this through JavaScript, can anyone help me to translate it in snaplogic expression language ? (newPayload is created by passing the actual payload)
let itemlen = newPayload.PurchaseOrderERPRequest_V1.PurchaseOrder.item.length;
for (i = 0; i < itemlen; i++) {
let BlockAssignmentlen = newPayload.PurchaseOrderERPRequest_V1.PurchaseOrder.item[i].AccountingCodingBlockDistribution.AccountingCodingBlockAssignment.length
for (j = 0; j < BlockAssignmentlen; j++) {
newPayload.PurchaseOrderERPRequest_V1.PurchaseOrder.item[i].AccountingCodingBlockDistribution.AccountingCodingBlockAssignment[j][“lineItemId”] = newPayload.PurchaseOrderERPRequest_V1.PurchaseOrder.item[i].lineItemId
}
};
In a nutshell want to know the functions/snaps which can be used in snaplogic to archive this.
Thanks
04-13-2020 02:50 AM
can i know how to use for loop in context of snaplogic for single document as input ?