简体   繁体   中英

Jolt transformation using shift,default operations

Input
{
  "name": "Karan",
  "age": 25,
  "contact": {
    "email": "abc@gmail.com"
  },
  "details": [
    {
      "contact": {
        "firstName": "karan",
        "lastName": "singh"
      },
      "phone": "5555555555",
      "email": "karan@gmail.com",
      "address": {
        "line1": "123",
        "city": "bangalore",
        "state": "karnataka",
        "country": "india",
        "zip": "570089"
      }
    }
  ],
  "shippingTo": {
    "contact": {
      "name": {
        "firstName": "5505",
        "lastName": "5505"
      },
      "phone": null,
      "email": null
    },
    "address": {
      "line1": "2100 88th St",
      "city": "Mumbai",
      "state": "Maharashtra",
      "country": "India",
      "zip": "07047"
    }
  },
  "fulfillmentLines": [
    {
      "chargeDetails": [
        {
          "chargeCategory": "PRODUCT",
          "chargeName": "ItemPrice",
          "chargePerUnit": {
            "currencyAmount": 34.96,
            "currencyUnit": "USD"
          },
          "isDiscount": false,
          "taxDetails": {
            "taxPerUnit": {
              "currencyAmount": 2.4,
              "currencyUnit": "USD"
            },
            "taxPerLine": {
              "currencyAmount": 2.4,
              "currencyUnit": "USD"
            }
          }
        }
      ],
      "lineDates": {
        "minDeliveryDate": "2019-01-10T00:30:12+00:00",
        "maxDeliveryDate": "2019-02-10T00:30:12+00:00",
        "orderProcessingDate": "2019-03-10T00:30:12+00:00",
        "preciseDeliveryDate": "2019-04-17T01:30:12+00:00"
      }
    }
  ]
}

Output:
{
  "contact": {
    "name": "Karan",
    "age": 25,
    "isTestMode": false //How to set it to true if the input Json contact.email contains "abc"
  },
  "contactDetails": [  //Shud pick from "details" input json
    {
      "personalInfo": {
        "address": {
          "line1": 123,
          "city": "bangalore",
          "state": "karnataka",
          "country": "india",
          "zip": "570089",
          "isLoadingAvailable": false //How to Set it to default value false in each contactDetails list
        },
        "contact": {
          "firstName": "karan",
          "lastName": "singh",
          "completeName": "karan singh"
        },
        "phone": "5555555555",
        "email": "karan@gmail.com"
      }
    }
  ],
  "orderLines": [
    {
      "shipToAddress": { // How to pick from the same "shippingTo" input json for each orderLines list
        "address": {
          "addressLineOne": "2100 88th St",
          "city": "Mumbai",
          "countryCode": "India",
          "postalCode": "07047",
          "stateOrProvinceCode": "Maharashtra"
        },
        "name": {
          "firstName": "5505",
          "lastName": "5505"
        },
        "phone": {
          "completeNumber": null
        },
        "email": {
          "emailAddress": null
        }
      },
      "charges": [  //Shud pick from "fulfillmentLines.chargeDetails" input json
        {
          "chargeCategory": "PRODUCT",
          "chargeName": "ItemPrice",
          "chargePerUnit": {
            "currencyAmount": 0,
            "currencyUnit": "USD"
          },
          "isDiscount": false,
          "tax": [       //How to convert it to array as its an object(fulfillmentLines.0.chargeDetails.0.taxDetails) in input json
            {
              "taxName": "Tax1",  //How to Set it to default value "Tax1" in each "tax" list
              "taxPerLine": {
                "currencyAmount": 2.15,
                "currencyUnit": "USD"
              },
              "taxPerUnit": {
                "currencyAmount": 2.15,
                "currencyUnit": "USD"
              }
            }
          ]
        }
      ],
      "orderedLineDates": [ //Shud pick from "fulfillmentLines.lineDates" input json
        {
          "dateTypeId": "DELIVERY",
          "minExpectedDate":"2019-01-10T00:30:12+00:00",//Shud pick from minDeliveryDate
          "maxExpectedDate": "2019-02-10T00:30:12+00:00",//Shud pick from maxDeliveryDate
          "expectedDate": "2019-04-17T01:30:12+00:00"//Shud pick from preciseDeliveryDate
        },
        {
          "dateTypeId": "OPD",
          "requestedDate": "2019-03-10T00:30:12+00:00",//Shud pick from orderProcessingDate
          "expectedDate": "2019-03-10T00:30:12+00:00"//Shud pick from orderProcessingDate
        }
      ]
    }
  ]
}

Need jolt spec for same. Also please suggest any good tutorial is available for same. Need info on below. 1.Add default values in list 2.Set the field values based on conditions of other fields 3.Can String append function will work in JOLT? 4.Convert the object to an array

Can you please suggest the JOLT spec for same?

I was learning from this site - http://jolt-demo.appspot.com - there are few very useful examples.
The second source was documentation and viewing issues on page https://github.com/bazaarvoice/jolt/issues
And below is Spec, check if it is what you ment, below are some comments - I hope you understand the rest:

[
  {
    "operation": "shift",
    "spec": {
      "name": "contact.name",
      "age": "contact.age",
      "contact": {
        "email": {
          "abc": { // here you check if it is "abc" value
            "#true": "contact.isTestMode" // # it makes that after it you puts default value
          },
          "*": { // and here you check any other values
            "#false": "contact.isTestMode"
          }
        }
      },
      "details": {
        "*": {
          "address": {
            "@": "contactDetails[&2].personalInfo.&",
            "#false": "contactDetails[&2].personalInfo.address.isLoadingAvailable"
          },
          "contact": "contactDetails[&1].personalInfo.&",
          "phone": "contactDetails[&1].personalInfo.phone",
          "email": "contactDetails[&1].personalInfo.email"
        }
      },
      "shippingTo": {
        "address": {
          "line1": "orderLines[#].shipToAddress.address.addressLineOne", // [#] it allows to put values to the same object
          "city": "orderLines[#].shipToAddress.address.city",
          "country": "orderLines[#].shipToAddress.address.countryCode",
          "zip": "orderLines[#].shipToAddress.address.postalCode",
          "state": "orderLines[#].shipToAddress.address.stateOrProvinceCode"
        },
        "contact": {
          "name": "orderLines[#].shipToAddress.&",
          "phone": "orderLines[#].shipToAddress.phone.completeNumber",
          "email": "orderLines[#].shipToAddress.email.emailAddress"
        }
      },
      "fulfillmentLines": {
        "*": {
          "chargeDetails": {
            "*": {
              "chargeCategory": "orderLines[#].charges[#].chargeCategory",
              "chargeName": "orderLines[#].charges[#].chargeName",
              "chargePerUnit": "orderLines[#].charges[#].&",
              "isDiscount": "orderLines[#].charges[#].isDiscount",
              "#Tax1": "orderLines[#].charges[#].tax[#].taxName",
              "taxDetails": {
                "*": "orderLines[#].charges[#].tax[#].&"
              }
            }
          },
          "lineDates": {
            "#DELIVERY": "orderLines[#].orderedLineDates[0].dateTypeId",
            "minDeliveryDate": "orderLines[#].orderedLineDates[0].minExpectedDate",
            "maxDeliveryDate": "orderLines[#].orderedLineDates[0].maxExpectedDate",
            "preciseDeliveryDate": "orderLines[#].orderedLineDates[0].expectedDate",
            "#OPD": "orderLines[#].orderedLineDates[1].dateTypeId",
            "orderProcessingDate": ["orderLines[#].orderedLineDates[1].requestedDate", "orderLines[#].orderedLineDates[1].expectedDate"]
          }
        }
      }
    }
  },
  {
    "operation": "modify-default-beta",
    "spec": {
      "contactDetails": {
        "*": {
          "personalInfo": {
            "contact": {
              "completeName": "=concat(@(1,firstName),' ',@(1,lastName))"
            }
          }
        }
      }
    }
  }
]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM