Skip to main content

JSONPath

Use JSONPath to query for JSON values

Several of FairCom's JSON API properties, including "propertyPath" and "recordPath", use JSONPath to specify the location of properties in a JSON document.

FairCom's implementation of JSONPath

  • It uses the period "." character to define the nesting of properties in objects, such as "personNames.givenName".

  • It uses straight brackets to define the position of a value in an array, such as "favoriteFoods[0]".

    • The first item in an array is always 0.

  • It supports the last keyword to refer to the last item in the array, such as "favoriteFoods[last]".

  • It also supports referencing elements before the last item in the array, such as "favoriteFoods[last-1]" and "favoriteFoods[last-2]".

  • FairCom's JSONPath does not use "$." to refer to the root object.

    • If you use an online JSONPath evaluator to create JSONPath expressions, such as jsonpath.com, you may need to add "$." to the JSONPath to make it work, such as $.personNames.legalName[1].

    • When you want to use a JSONPath that you created in an online JSONPath evaluator, you need to remove the "$." from you JSONPath expressions.

Example JSON document with property paths

The "jsonPaths" property contains a JSONPath for each property in the document.

{  
  "id": 1,
  "type": "person",
  "birthdate": "2000-01-01",
  "favoriteFoods": [ "pizza", "ice cream", "steak" ],


  "personNames": {
    "givenName": "Michael",
    "surname": "Bowers",
    "nickname": "Mike",
    "legalName": [ "Michael", "Bowers" ]
  },
  
  "emailList": [
    {
      "emailPurpose": "home",
      "emailAddress": "myhome@gmail.com"
    },
    {
      "emailPurpose": "work",
      "emailAddress": "mywork@gmail.com"
    }    
  ]
}

Examples using JSONPath property to read and write JSON values

JSONPath can refer to any value in the previous JSON document.

Table 1. JSONPath examples

JSONPath

Value

"id"

1

"type"

"person"

"birthdate"

"2000-01-01"

"favoriteFoods"

[ "pizza", "ice cream", "steak" ]

"favoriteFoods[0]"

"pizza"

"favoriteFoods[1]"

"ice cream"

"favoriteFoods[2]"

"steak"

"favoriteFoods[last]"

"steak"

"favoriteFoods[last-1]"

"ice cream"

"favoriteFoods[last-2]"

"pizza"

"personNames"

{
  "givenName": "Michael",
  "surname": "Bowers",
  "nickname": "Mike",
  "legalName": [ "Michael", "Bowers" ]
}

"personNames.givenName"

"Michael"

"personNames.surname"

"Bowers"

"personNames.nickname"

"Mike"

"personNames.legalName"

[ "Michael", "Bowers" ]

"personNames.legalName[0]"

"Michael"

"personNames.legalName[1]"

"Bowers"

"emailList"

"emailList": 
[
  {
    "emailPurpose": "home",
    "emailAddress": "myhome@gmail.com"
  },
  {
    "emailPurpose": "work",
    "emailAddress": "mywork@gmail.com"
  }    
]

"emailList[0]"

{
  "emailPurpose": "home",
  "emailAddress": "myhome@gmail.com"
}

"emailList[0].emailPurpose"

"home"

"emailList[0].emailAddress"

"myhome@gmail.com"

"emailList[1]"

{
  "emailPurpose": "work",
  "emailAddress": "mywork@gmail.com"
}

"emailList[1].emailPurpose"

"work"

"emailList[1].emailAddress"

"mywork@gmail.com"



FairCom JSONPath features

FairCom supports the following JSONPath features to read or write one JSON value:

  • The property selector . identifies a JSON property, such as .humidity.

  • You can nest property selectors, such as .humidity.temperature.

  • The array element selector [n] uses a zero-based number to specify one array element, such as .temperatures[0].

    • You can also use .temperatures[last] to retrieve the last element.

    • You can also use .temperatures[last-1] to retrieve the element before the last element.

  • You can mix property and array element selectors, such as .humidity.temperatures[2].celsius.

FairCom JSONPath limitations

FairCom's JSONPath feature supports reading and writing one JSON value. Thus, it does not support JSONPath features that return multiple values:

  • The recursive descent .. wildcard returns all values associated with the specified property name, such as ..name.

  • The wildcard expression * selects all child items, such as all the array items in names[*] or all the child properties in address.*.

  • Array range expressions select more than one value, such as [index1, index2, ...], [start:end], [start:], [:n], [-n:], [?(expression)], and [(expression)].

  • @ to represent the current node in expressions.

  • The root expression $ typically occurs at the beginning of the JSONPath statement. FairCom assumes JSONPath starts with the root node; thus, you must omit $.

  • FairCom also does not support embedded expressions.

FairCom's JSON API uses JSONPath to precisely locate values within JSON documents, particularly for properties like "propertyPath" and "recordPath". This implementation navigates nested objects using dot notation (e.g., "personNames.givenName") and accesses array elements using bracket notation (e.g., "favoriteFoods[0]"), supporting both numerical indices and the "last" keyword for flexible array referencing, including offsets like "favoriteFoods[last-1]". A key distinction from some online JSONPath evaluators is that FairCom's version does not require the "$." prefix for the root object, meaning users should remove it when adapting expressions from external tools.

JSONPath query syntax
how to query JSON data
JSON value extraction
JSON navigation
JSON data paths
JSONPath
JSON API JSONPath
propertyPath JSON API
recordPath JSON API
JSONPath dot notation
JSONPath array access brackets
JSONPath array index
JSONPath last keyword
JSONPath negative indexing
JSONPath root element
JSONPath nested objects
JSONPath examples
how to use JSONPath in API
JSONPath for data manipulation
JSONPath for reading JSON
JSONPath for writing JSON