JSON Path

Manipulator

JSONPath is a similar to XPath alternative for JSON.

The result can be a single value or a list of multiple values (when the path is indefinite). In case there are multiple results and the selected output type cannot handle it (not a list of the selected type, or a JSON) the execution will fail. If the result cannot be represented in the selected type, missing value will be returned.

There are two notations, dot-notation:$.book[1].title and bracket-notation: $['book'][1]['title'] (indexing starts from 0, negative indices are relative to the last element).

Example input:
{"book": [
  {"year": 1999,
   "title": "Timeline",
   "author": "Michael Crichton"},
  {"year": 2000,
   "title": "Plain Truth",
   "author": "Jodi Picoult"}
]}

Example results:
$.book[0]
{"year": 1999, "title": "Timeline", "author": "Michael Crichton"} (JSON or String single value)
$.book[*].year
[1999,2000] (JSON, Int or Real list)
$.book[2].year
? (no such part)
$.book[?(@.year==1999)].title
Timeline (String) or "Timeline" (JSON)

The default path ($..*) will select all possible subparts (excluding the whole JSON value).

When you request the paths instead of values for the $.book[0].* JSONPath, you will get the paths -in bracket notation- as a list of Strings:

  • $['book'][0]['year']
  • $['book'][0]['title']
  • $['book'][0]['author']
which are valid JSONPaths for the input JSON value.

The filters ?(expr)can be used to select contents with specific properties, for example $..book[?(@.publisher)] selects the books that specify their publisher (@ refers to the actual element).

It uses the jayway/JsonPath implementation.

Input Ports

  1. Type: Data
    A table with JSON column

Output Ports

  1. Type: Data
    Table with the found parts

Extension

This node is part of the extension

KNIME JSON-Processing

v4.0.0

Short Link

Drag node into KNIME Analytics Platform