Json Query
Resumo
- Json Query é uma linguagem de consulta para JSON.
Notação
Uma expressão json_query especifica um caminho para um elemento (ou um conjunto de elementos) em uma estrutura JSON. Os caminhos podem usar a notação de ponto:
{{ result | json_query('data[*].id') }}Ou a notação de colchetes:
{{ result | json_query("['data'][*]['id']") }}Outros possíveis elementos de sintaxe estão descritos a seguir
Expressão | Descrição |
|---|---|
.propriedade | Seleciona a propriedade especificada em um objeto pai. |
['propriedade'] | Seleciona a propriedade especificada em um objeto pai. Dica: Use esta notação se o nome da propriedade contiver caracteres especiais, como espaços. |
[n] | Seleciona o enésimo elemento de um array. Os índices são baseados em 0. |
[index1,index2,…] | Seleciona os elementos do array com os índices especificados. Retorna uma lista. |
* | Wildcard seleciona todos os elementos em um objeto ou array, independentemente de seus nomes ou índices. |
[start:end] [start:] | Seleciona os elementos da matriz a partir do índice inicial e até, mas não incluindo, o índice final. Se o fim for omitido, seleciona todos os elementos do início ao fim da matriz. Retorna uma lista. |
[:n] | Seleciona os primeiros n elementos do array. Retorna uma lista. |
[-n:] | Seleciona os últimos n elementos do array. Retorna uma lista. |
[?(expression)] | Expressão de filtro. Seleciona todos os elementos em um objeto ou array que correspondem ao filtro especificado. Retorna uma lista. |
@ | Usado em expressões de filtro para se referir ao nó atual que está sendo processado. |
Notas:
- As expressões JSONPath, incluindo nomes e valores de propriedade, diferenciam maiúsculas de minúsculas.
Filtros:
Filtros são expressões lógicas usadas para filtrar arrays. Um exemplo de uma expressão json_query com um filtro é
{{ store | json_query('book[?(@.price < `10`)]') }}onde representa o item ou objeto da matriz atual sendo processado.
Abaixo estão os operadores que podem ser usados em filtros.
Operador | Descrição |
|---|---|
== | Igual a. Os valores da string devem ser colocados entre ``: books[?title==`Book`] |
!= | Diferente de. Os valores da string devem ser colocados entre ``: books[?title==`Book`] |
> | Maior que. |
>= | Melhor que ou igual a. |
< | Menor que. |
<= | Menos que ou igual a. |
&& | E lógico, usado para combinar várias expressões de filtro. books[?(title==`Book` && id==`1`)] |
|| | OR lógico, usado para combinar várias expressões de filtro. books[?(title==`Book` || id==`2`)] |
contains | Verifica se um array contém o elemento especificado. sizes[?contains(@, `L`)] |
length | Retorna o comprimento do array, string ou objeto fornecido. length(sizes) |
max | Retorna o maior número encontrado no argumento fornecido. min(sizes) |
min | Retorna o menor número encontrado no argumento fornecido. min(sizes) |
sort | Esta função aceita um argumento do tipo array e retorna seus elementos ordenados. O array deve ser uma lista de strings ou números. sort(sizes) |
type | Retorna o tipo do argumento fornecido como um valor de string. |
Exemplos:
Dada uma variável "result" contendo uma chave "store" que contém múltiplos objetos:
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95,
"id": 1
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99,
"id": 2
},
{
"category": "fiction",
"author": "J.R.R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99,
"id": 3
}
],
"bicycle": {
"color": "vermelho",
"price": 19.95
}
},
"expensive": 10
}
Expressão | Retorna |
|---|---|
| |
{{ result | json_query("store.*") }} | Todas as propriedades diretas de store. |
{{ result | json_query("store.bicycle.color") }} | O atributo color de bycicle presente em store. Resultado: vermelho |
{{ result | json_query("store.book[*].price") }} | O atributo price de todos os itens presentes na chave book. Resultado: [8.95, 8.99, 22.99] |
{{ result | json_query("store.book[*]") }} | Todos os atributos presentes na chave book. |
{{ result | json_query("store.book[*].title") }} | O atributo title de todos os itens presentes na chave book. Resultado: [Sayings of the Century, Moby Dick, The Lord of the Rings] |
{{ result | json_query("store.book[0]") }} | Os atributos presentes no primeiro objeto da chave book. Resultado: [ { "category":"reference", "author":"Nigel Rees", "title":"Sayings of the Century", "price":8.95, "id": 1 } ] |
{{ result | json_query("store.book[0].title") }} | O atributo title presente no primeiro objeto da chave book. Resultado: Sayings of the Century |
{{ result | json_query('store.book[:2].title') }} | Os atributo title dos dois primeiros objetos da chave book. Resultado: [Sayings of the Century, Moby Dick] |
{{ result | json_query('store.book[-1:].title') }} | O título do último livro. Resultado: [The Lord of the Rings] |
{{ result | json_query('store.book[?(@.author==`J.R.R. Tolkien`)].title') }} | O atributo title de todos os objetos da chave book que possuem J.R.R. Tolkien como author (correspondência exata, diferencia maiúsculas de minúsculas). Resultado: [The Lord of the Rings] |
{{ result | json_query('store.book[?(@.isbn)]') }} | Todas as chaves de book que possuem o atributo isbn. |
{{ result | json_query('store.book[?(@.price < `10`)]') }} | Todas as chaves de book que possuem o valor do atributo price menor que 10. |
{{ result | json_query('store.book[?(@.category == `fiction` || @.category == `reference`)]') }} | Todas as chaves de book que possuem o valor do atributo category igual a fiction e reference. |