Este tópico descreve a sintaxe comum do JMESPath e fornece exemplos de como utilizá-la.
O JMESPath é uma linguagem aprimorada de consulta e computação para JSON. Utilize o JMESPath para extrair, calcular e converter dados JSON. Para obter mais informações, consulte Tutorial do JMESPath.
Na transformação de dados, utilize as funções json_select, e_json e e_split com o JMESPath para buscar valores de campos ou expressões JSON, ou para calcular valores específicos. A sintaxe é a seguinte:
json_select(value, "jmes_expression", ...)
e_json(field_name, jmes="jmes_expression", ...)
e_split(field_name, ... jmes="jmes_expression", ...)
Para obter mais informações sobre como usar essas funções, consulte json_select, e_json e e_split.
Obter um valor usando a chave de um campo
-
Log bruto
json_data: {"a":"foo","b":"bar","c":"baz"} -
Sintaxe de transformação
# 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")) -
Resultado
a1:foo b1:bar c1:baz json_data:{"a":"foo","b":"bar","c":"baz"}
Obter um valor aninhado
-
Log bruto
json_data:{"a": {"b":{"c":{"d":"value"}}}} -
Sintaxe de transformação
# Get the value of d from the JSON expression. e_set("e", json_select(v("json_data"), "a.b.c.d")) -
Resultado
e:value json_data:{"a": {"b":{"c":{"d":"value"}}}}
Obter um valor fatiando dados
-
Log bruto
json_data:{"a": ["b", "c", "d", "e", "f"]} -
Sintaxe de transformação
# 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:]")) -
Resultado
json_data:{"a": ["b", "c", "d", "e", "f"]} key:["d", "e", "f"]
Uso combinado
-
Log bruto
json_data:{"a": {"b": {"c": [{"d": [0, [1, 2]]}, {"d": [3, 4]}]}}} -
Sintaxe de transformação
# 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]")) -
Resultado
json_data:{"a": {"b": {"c": [{"d": [0, [1, 2]]}, {"d": [3, 4]}]}}} key:1
Obter um valor usando projeção
-
Exemplo 1
-
Log bruto
json_data:{"people": [{"first": "James", "last": "d"},{"first": "Jacob", "last": "e"},{"first": "Jayden", "last": "f"},{"missing": "different"}],"foo": {"bar": "baz"}} -
Sintaxe de transformação
# Get the values of the first fields from the people list. e_set("key", json_select(v("json_data"), "people[*].first")) -
Resultado
json_data:{"people": [{"first": "James", "last": "d"},{"first": "Jacob", "last": "e"},{"first": "Jayden", "last": "f"},{"missing": "different"}],"foo": {"bar": "baz"}} key:["James", "Jacob", "Jayden"]
-
-
Exemplo 2
-
Log bruto
json_data:{"ops": {"functionA": {"numArgs": 2},"functionB": {"numArgs": 3},"functionC": {"variadic": true}}} -
Sintaxe de transformação
# Get the values of the numArgs fields from ops. e_set("key", json_select(v("json_data"), "ops.*.numArgs")) -
Resultado
json_data:{"ops": {"functionA": {"numArgs": 2},"functionB": {"numArgs": 3},"functionC": {"variadic": true}}} key:[2, 3]
-
-
Exemplo 3
-
Log bruto
json_data:{"machines": [{"name": "a", "state": "running"},{"name": "b", "state": "stopped"},{"name": "c", "state": "running"}]} -
Sintaxe de transformação
# Get the name values from machines where the state is 'running'. e_set("key", json_select(v("json_data"), "machines[?state=='running'].name")) -
Resultado
json_data:{"machines": [{"name": "a", "state": "running"},{"name": "b", "state": "stopped"},{"name": "c", "state": "running"}]} key:["a", "c"]
-
Extrair múltiplos valores
-
Log bruto
json_data:{"people": [{"name": "a","state": {"name": "up"}},{"name": "b","state": {"name": "down"}}]} -
Sintaxe de transformação
# Get the name and state values from people. e_set("key", json_select(v("json_data"), "people[].[name, state.name]")) -
Resultado
json_data:{"people": [{"name": "a","state": {"name": "up"}},{"name": "b","state": {"name": "down"}}]} key:[["a", "up"], ["b", "down"]]
Calcular o número de elementos em um array
-
Log bruto
json_data:{"a": ["b", "c", "d", "e", "f"]} -
Sintaxe
# 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)) -
Resultado
json_data:{"a": ["b", "c", "d", "e", "f"]} key:5json_data:{"a": ["b", "c", "d", "e", "f"]} no-empty:true