Skip to main content
Became Hot Network Question
added 1272 characters in body
Source Link
Sam
  • 45
  • 6

Thanks.

Yes, I have tested the SSJS option also.

<script runat='server'>
  // Load the core library
  Platform.Load('Core', '1.1.5');

  var jsonDE = Platform.Variable.GetValue('@json');

  // parse JSON response
  var jsonParsed = Platform.Function.ParseJSON(jsonDE);


  Variable.SetValue("@ToCurrencyX", jsonParsed.email.dynamicTemplateData.user.toCurrency);
  Variable.SetValue("@FromCurrencyX", jsonParsed.email.dynamicTemplateData.payload.currency);
  Variable.SetValue("@referenceX", jsonParsed.email.dynamicTemplateData.payload.reference);
  Variable.SetValue("@amountX", jsonParsed.email.dynamicTemplateData.payload.amount);
  Variable.SetValue("@UsernameX", jsonParsed.email.dynamicTemplateData.payload.userName);
  Variable.SetValue("@creditedByX", jsonParsed.email.dynamicTemplateData.payload.creditedBy);
  Variable.SetValue("@AccountGUID", jsonParsed.email.dynamicTemplateData.company.CompanyId);

</script>

I couldn't figure out (searched SF docs and Stackexchange posts) how to assign the JSON column from DE which is the entry source for the journey within the SSJS script. The @json is set up in ane AMPScript block that precedes the SSJS block

Thanks.

Yes, I have tested the SSJS option also.

<script runat='server'>
  // Load the core library
  Platform.Load('Core', '1.1.5');

  var jsonDE = Platform.Variable.GetValue('@json');

  // parse JSON response
  var jsonParsed = Platform.Function.ParseJSON(jsonDE);


  Variable.SetValue("@ToCurrencyX", jsonParsed.email.dynamicTemplateData.user.toCurrency);
  Variable.SetValue("@FromCurrencyX", jsonParsed.email.dynamicTemplateData.payload.currency);
  Variable.SetValue("@referenceX", jsonParsed.email.dynamicTemplateData.payload.reference);
  Variable.SetValue("@amountX", jsonParsed.email.dynamicTemplateData.payload.amount);
  Variable.SetValue("@UsernameX", jsonParsed.email.dynamicTemplateData.payload.userName);
  Variable.SetValue("@creditedByX", jsonParsed.email.dynamicTemplateData.payload.creditedBy);
  Variable.SetValue("@AccountGUID", jsonParsed.email.dynamicTemplateData.company.CompanyId);

</script>

I couldn't figure out (searched SF docs and Stackexchange posts) how to assign the JSON column from DE which is the entry source for the journey within the SSJS script. The @json is set up in ane AMPScript block that precedes the SSJS block

added 120 characters in body
Source Link
Sam
  • 45
  • 6

Update This is how it is stored in the DE enter image description here

Update This is how it is stored in the DE enter image description here

Source Link
Sam
  • 45
  • 6

BuildRowsetFromJSON returns null when parsing a hierarchical JSON string sourced from a DE

Below is the sample JSON and the AMPScript to extract the necessary fields from the JSON

{
"_logLevel": "info",
"msg": "attempting to send email to sendgrid",
"awsRegion": "ap-southeast-2",
"functionName": "processNotifications-prod",
"functionVersion": "$LATEST",
"functionMemorySize": "512",
"environment": "prod",
"email": {
    "to": "[email protected]",
    "from": "[email protected]",
    "replyTo": "[email protected]",
    "templateId": "d-06b21ede68a2495ab8f48b4ef5eb0e90",
    "dynamicTemplateData": {
        "user": {
            "id": "0dd9fd9e-79a7-4feb-b794-1152fa179737",
            "firstName": "FirstName",
            "middleName": "",
            "lastName": "Lastname",
            "addressStructured": {
                "unitType": "House",
                "streetName": "Suburb",
                "streetType": "Road",
                "premise": null,
                "streetNumber": "4",
                "unitNumber": "4",
                "block": null,
                "floor": null
            },
            "address": "House 4 4 My Road",
            "city": "Dublin",
            "postCode": "D15N40T",
            "state": "Dublin",
            "email": "[email protected]",
            "country": "Ireland",
            "countryCode": "IE",
            "countryAreaCode": "+353",
            "dateOfBirth": "01/01/1981",
            "mobile": "+353812390316",
            "fromCurrency": "AUD",
            "toCurrency": "USD",
            "transferRange": "0 - 500,000",
            "createdAt": "2024-10-31T17:06:06.000Z",
            "idVerified": true,
            "roleName": "User",
            "marketingAgreement": true,
            "ofxUserAgreement": true,
            "devices": [
                "apns-116b3943-4ae9-4bba-aff3-c4ca33f948ca"
            ]
        },
        "company": {
            "CompanyId": "4e710f61-5574-460f-a26e-5f153036b5b0",
            "Name": "1stName LastName"
        },
        "payload": {
            "reference": "Transfer NCP test funding",
            "amount": 4.62,
            "currency": "EUR",
            "userName": "1stName LastName",
            "creditedBy": "Jason Xxxxx"
        }
    }
},
"_tags": []

}

%%[
  /*--- assign JSON input---*/
  SET @json = AttributeValue("JSON_Data")
  
  /* SET @json = CONCAT('[',@json,']') */
  OutputLine(v(@json))
  
  /* get the transactional data */
  var  @UsernameX, @referenceX, @amountX, @FromCurrencyX, @creditedByX
  
  /* Decompose the payload data into individual attributes */
   
  SET @ToCurrencyX = BuildRowsetFromJSON(@json,'$.email.dynamicTemplateData.user.toCurrency',1)
  OutputLine(v(@ToCurrencyX))
  SET @ContactGUID = BuildRowsetFromJSON(@json,'$.email.dynamicTemplateData.user.id',1)
  OutputLine(v(@ContactGUID))
  SET @AccountGUID = BuildRowsetFromJSON(@json,'$.email.dynamicTemplateData.company.CompanyId',1)
  OutputLine(v(@AccountGUID))

 
  /* SET @payload = BuildRowsetFromJSON(@json,'$.email',1) */
  
  /* set @rows = BuildRowsetFromJson(@json, '$.[*]', 1) */
  /* OutputLine(v(@rows)) */
  /* set @rowCount = rowcount(@rows) */
  /* OutputLine(v(@rowcount)) */
  
  /* set @payload = field(row(@rows,1),"payload") */
  
  SET @payload = BuildRowsetFromJSON(@json,'$.email.dynamicTemplateData.payload',1) 
  OutputLine(v(@payload))
  
  /* SET @payload = CONCAT('[',@payload,']') */
  /* SET @payloadRS = BuildRowsetFromJSON(@payload,'$.[*]',1) */
  /* SET @payloadRowCount = RowCount(@payloadRS) */
  /* OutputLine(v(@payloadRowCount)) *
  /* SET @Row = Row(@payloadRS,1) */
  /* SET @UsernameX = Field(@Row,"Username") */
  /* SET @referenceX = Field(@Row,"Reference") */
  /* SET @amountX = Field(@Row,"amount") */
  /* SET @FromCurrencyX = Field(@Row,"currency") */
  /* SET @creditedByX = Field(@Row,"creditedBy") */

 

]%%

The commented code in the AMPScript are the various attempts to try different options.

Objective is to get subset of the values under the $.email, $.email.dynamicTemplateData.user and $.email.dynamicTemplateData.company nodes and all of the attribute values from the $.email.dynamicTemplateData.payload and I have attempted variations (some commented) in the function call but have not been successful with the responses.

The JSON has no arrays and is uploaded to a DE Text column. The DE is the entry source to test the templated EMail and the AMPScript is a content block referenced inside the email.

I have used the same JSON with and without escape char in different rows in the DE. But the results were the same

I have also tried wrapping the json between [ .. ] but no success (code commented above)

OutputLine(v(@json)) does display the full JSON value as below.


{ "_logLevel": "info", "msg": "attempting to send email to sendgrid", "awsRegion": "ap-southeast-2", "functionName": "processNotifications-prod", "functionVersion": "$LATEST", "functionMemorySize": "512", "environment": "prod", "email": { "to": "[email protected]", "from": "[email protected]", "replyTo": "[email protected]", "templateId": "d-06b21ede68a2495ab8f48b4ef5eb0e90", "dynamicTemplateData": { "user": { "id": "0dd9fd9e-79a7-4feb-b794-1152fa179737", "firstName": "FirstName", "middleName": "", "lastName": "Lastname", "addressStructured": { "unitType": "House", "streetName": "Suburb", "streetType": "Road", "premise": null, "streetNumber": "4", "unitNumber": "4", "block": null, "floor": null }, "address": "House 4 4 My Road", "city": "Dublin", "postCode": "D15N40T", "state": "Dublin", "email": "[email protected]", "country": "Ireland", "countryCode": "IE", "countryAreaCode": "+353", "dateOfBirth": "01/01/1981", "mobile": "+353812390316", "fromCurrency": "AUD", "toCurrency": "USD", "transferRange": "0 - 500,000", "createdAt": "2024-10-31T17:06:06.000Z", "idVerified": true, "roleName": "User", "marketingAgreement": true, "ofxUserAgreement": true, "devices": [ "apns-116b3943-4ae9-4bba-aff3-c4ca33f948ca" ] }, "company": { "CompanyId": "4e710f61-5574-460f-a26e-5f153036b5b0", "Name": "1stName LastName" }, "payload": { "reference": "Transfer NCP test funding", "amount": 4.62, "currency": "EUR", "userName": "1stName LastName", "creditedBy": "Jason Xxxxx" } } }, "_tags": [] }


  1. Can I use the BuildRowsetFromJSON function to traverse nodes and return the value under the node? In the code above, it does not work for ToCurrency, ContactGUID, etc.
  2. Can I use the function to return the node sub-structure as a string (e.g. $.email.dynamicTemplateData.payload) and then execute the function over the result to use the Field function to extract the child items?