This function creates a row set from an JSON string. It returns an error or an empty row set if there no matches the specified JSON path.



Ordinal Type Required Description
1 String True JSON string to parse into a row set
2 String True JSON path selector
3 Boolean True When no match is found, a value of 0 returns an error, while a 1 returns an empty row set (NOTE: see Example 3 below)

NOTE: As with XML, AMPscript treats JSONs as string values until parsed into row sets.

NOTE: According to Salesforce, this function follows the Internet Engineering Task Force (IETF) specifications, outlined in these examples.

NOTE: The current version of Salesforce Marketing Cloud does not support JSON path filter expressions. An expression like $.order.lineItems.[?('Square')] (against the sample JSON below) is unsupported. More information about JSON path filter expressions can be found here.

NOTE: The third argument is required, however it does not return an error in any non-match scenario — only an empty rowset.

TIP: For help building a valid JSON path, see JSONPath Online Evaluator, JSON Path Finder or JSONPath Expression Tester.

Example 1

This example returns the order line items in a JSON payload and outputs the properties of each.


  set @jsonStr = AttributeValue("jsonStr") /* value from attribute or DE column in send context */
  set @jsonStr = "" /* or a literal value */

  set @jsonStr = '{
    "order": {
      "orderNum": 123456789,
      "firstName": "Dietrich",
      "lineItems": [
          "sku": "123",
          "name": "Square",
          "url": ""
          "sku": "456",
          "name": "Circle",
          "url": ""
          "sku": "789",
          "name": "Triangle",
          "url": ""

  set @lineItemRowset = BuildRowsetFromJSON(@jsonStr,"$.order.lineItems.[*]",1)
  set @rowCount = rowcount(@lineItemRowset)

  if @rowCount > 0 then

    for @i = 1 to @rowCount do

      set @row = row(@lineItemRowset, @i)
      set @sku = field(@row, "sku")
      set @name = field(@row, "name")
      set @url = field(@row, "url")


      <br><br>row: %%=v(@i)=%%
      <br>sku: %%=v(@sku)=%%
      <br>name: %%=v(@name)=%%
      <br>url: %%=v(@url)=%%


    next @i


   output(concat("<br>no line items found"))




row: 1
sku: 123
name: Square

row: 2
sku: 456
name: Circle

row: 3
sku: 789
name: Triangle

Example 2

Not a subscriber? Subscribe now.

Example 3

Not a subscriber? Subscribe now.