This topic describes the common JMESPath syntax and provides examples on how to use the syntax.
JMESPath is an enhanced query and computing language for JSON. Use JMESPath to extract, compute, and convert JSON data. For more information, see JMESPath Tutorial.
In data transformation, use the json_select, e_json, and e_split functions with JMESPath to fetch the values of fields or JSON expressions, or to compute specific values. The syntax is as follows:
json_select(value, "jmes_expression", ...)
e_json(field_name, jmes="jmes_expression", ...)
e_split(field_name, ... jmes="jmes_expression", ...)For more information about how to use these functions, see json_select, e_json, and e_split.
Obtain a value using the key of a field
Raw log
json_data: {"a":"foo","b":"bar","c":"baz"}Transformation syntax
# Get the value of a from the JSON expression. e_set("a1", json_select(v("json_data"), "a")) # Get the value of b from the JSON expression. e_set("b1", json_select(v("json_data"), "b")) # Get the value of c from the JSON expression. e_set("c1", json_select(v("json_data"), "c"))Result
a1:foo b1:bar c1:baz json_data:{"a":"foo","b":"bar","c":"baz"}
Obtain a nested value
Raw log
json_data:{"a": {"b":{"c":{"d":"value"}}}}Transformation syntax
# Get the value of d from the JSON expression. e_set("e", json_select(v("json_data"), "a.b.c.d"))Result
e:value json_data:{"a": {"b":{"c":{"d":"value"}}}}
Obtain a value by slicing data
Raw log
json_data:{"a": ["b", "c", "d", "e", "f"]}Transformation syntax
# Get the values from field a, starting from slice 2. The value at slice 0 is b, and the value at slice 1 is c. e_set("key", json_select(v("json_data"), "a[2:]"))Result
json_data:{"a": ["b", "c", "d", "e", "f"]} key:["d", "e", "f"]
Combined Usage
Raw log
json_data:{"a": {"b": {"c": [{"d": [0, [1, 2]]}, {"d": [3, 4]}]}}}Transformation syntax
# c[0] represents the {"d": [0, [1, 2]]} part. d[1] represents [1, 2]]. The return value is 1. e_set("key", json_select(v("json_data"), "a.b.c[0].d[1][0]"))Result
json_data:{"a": {"b": {"c": [{"d": [0, [1, 2]]}, {"d": [3, 4]}]}}} key:1
Obtain a value using projection
Example 1
Raw log
json_data:{"people": [{"first": "James", "last": "d"},{"first": "Jacob", "last": "e"},{"first": "Jayden", "last": "f"},{"missing": "different"}],"foo": {"bar": "baz"}}Transformation syntax
# Get the values of the first fields from the people list. e_set("key", json_select(v("json_data"), "people[*].first"))Result
json_data:{"people": [{"first": "James", "last": "d"},{"first": "Jacob", "last": "e"},{"first": "Jayden", "last": "f"},{"missing": "different"}],"foo": {"bar": "baz"}} key:["James", "Jacob", "Jayden"]
Example 2
Raw log
json_data:{"ops": {"functionA": {"numArgs": 2},"functionB": {"numArgs": 3},"functionC": {"variadic": true}}}Transformation syntax
# Get the values of the numArgs fields from ops. e_set("key", json_select(v("json_data"), "ops.*.numArgs"))Result
json_data:{"ops": {"functionA": {"numArgs": 2},"functionB": {"numArgs": 3},"functionC": {"variadic": true}}} key:[2, 3]
Example 3
Raw log
json_data:{"machines": [{"name": "a", "state": "running"},{"name": "b", "state": "stopped"},{"name": "c", "state": "running"}]}Transformation syntax
# Get the name values from machines where the state is 'running'. e_set("key", json_select(v("json_data"), "machines[?state=='running'].name"))Result
json_data:{"machines": [{"name": "a", "state": "running"},{"name": "b", "state": "stopped"},{"name": "c", "state": "running"}]} key:["a", "c"]
Extract multiple values
Raw log
json_data:{"people": [{"name": "a","state": {"name": "up"}},{"name": "b","state": {"name": "down"}}]}Transformation syntax
# Get the name and state values from people. e_set("key", json_select(v("json_data"), "people[].[name, state.name]"))Result
json_data:{"people": [{"name": "a","state": {"name": "up"}},{"name": "b","state": {"name": "down"}}]} key:[["a", "up"], ["b", "down"]]
Calculate the number of elements in an array
Raw log
json_data:{"a": ["b", "c", "d", "e", "f"]}Syntax
# Get the length of array a. e_set("key", json_select(v("json_data"), "length(a)"))# Get the length of array a. If length(a) > 0, set the no-empty field to true. e_if(json_select(v("json_data"), "length(a)", default=0), e_set("no-empty", true))Result
json_data:{"a": ["b", "c", "d", "e", "f"]} key:5json_data:{"a": ["b", "c", "d", "e", "f"]} no-empty:true