Guia de Consulta JSONPath: Extraia Precisamente Dados Aninhados do JSON

JSON

O que é JSONPath

JSONPath é uma linguagem de consulta para JSON, semelhante ao XPath para XML, que extrai dados com precisão de JSON aninhado complexo:

{
  "store": {
    "books": [
      {"title": "The Three-Body Problem", "price": 68},
      {"title": "To Live", "price": 45},
      {"title": "One Hundred Years of Solitude", "price": 55}
    ]
  }
}

Use $.store.books[*].title para extrair todos os títulos: ["The Three-Body Problem", "To Live", "One Hundred Years of Solitude"]


Referência de Sintaxe Básica

Sintaxe Significado Exemplo
$ Nó raiz $
. Nó filho $.store
[] Índice de array ou nó filho $[0], $['key']
* Curinga, todos os elementos $.store.*
.. Descida recursiva, todos os níveis $..title
[start:end] Slice de array $[0:2]
[?(expr)] Expressão de filtro $[?(@.price > 50)]

Sintaxe Explicada em Detalhes

Nó Raiz $

$ representa a raiz do JSON. Todos os caminhos começam a partir de $:

$           → Todo o JSON
$.store     → O objeto store

Acesso a Nó Filho .

Use . ou [] para acessar nós filhos:

$.store.books        → O array books
$.store['books']     → Forma equivalente; necessária quando nomes de chaves contêm caracteres especiais

Índice de Array []

$.store.books[0]     → Primeiro livro
$.store.books[-1]    → Último livro
$.store.books[0:2]   → Primeiros dois livros (slice)

Curinga *

$.store.books[*]           → Todos os livros
$.store.books[*].title     → Todos os títulos

Descida Recursiva ..

.. busca em todos os níveis sem precisar do caminho completo:

$..title     → Todos os campos title em qualquer nível
$..price     → Todos os campos price em qualquer nível

.. é especialmente útil em respostas de API profundamente aninhadas.


Expressões de Filtro ?()

A filtragem é o recurso mais poderoso do JSONPath:

Operadores de Comparação

Operador Significado Exemplo
== Igual a $[?(@.price == 45)]
!= Diferente de $[?(@.price != 45)]
> Maior que $[?(@.price > 50)]
< Menor que $[?(@.price < 50)]
>= Maior ou igual a $[?(@.price >= 55)]

Operadores Lógicos

$[?(@.price > 50 && @.price < 70)]    → Preço entre 50 e 70
$[?(@.category == 'fiction' || @.price < 40)]    → Ficção ou preço abaixo de 40

Correspondência de Strings

$[?(@.title =~ /Three.*/)]    → Título começando com "Three"

Usando a Ferramenta JSONPath

Passo 1: Abrir a Ferramenta

Visite a ferramenta JSONPath para acessar a interface de consulta.

Passo 2: Inserir Dados JSON

Cole sua resposta de API ou dados JSON na caixa de entrada. Você pode embelezá-los primeiro com o Formatador JSON.

Passo 3: Escrever uma Expressão JSONPath

Insira uma expressão na caixa de consulta, ex.: $.data.users[*].name.

Passo 4: Visualizar Resultados da Extração

A ferramenta exibe os resultados correspondentes em tempo real e destaca os nós correspondidos na origem.


Prática: Extraindo Dados de Respostas de API

Exemplo de API do GitHub

{
  "items": [
    {"full_name": "vuejs/vue", "stargazers_count": 45000, "language": "TypeScript"},
    {"full_name": "facebook/react", "stargazers_count": 42000, "language": "JavaScript"}
  ]
}
$.items[*].full_name              → Todos os nomes de repositórios
$.items[?(@.stargazers_count > 43000)].full_name  → Nomes de repos com Stars > 43000

Extração de Dados Paginados

$.data.list[*].id                 → Todos os IDs na página atual
$.pagination.next_cursor          → Cursor da próxima página

JSONPath vs JMESPath

Comparação JSONPath JMESPath
Estilo de sintaxe Similar ao XPath Similar ao SQL/pipes
Busca recursiva .. suportado nativamente Requer travessia explícita
Sintaxe de filtro [?(@.x > 1)] [?x > 1]
Projeção/transformação Não suportado Suporta [*].{n: name}
Ordenação de múltiplos resultados Não garantida Pode ordenar
Ferramenta JSONPath JMESPath

Use JSONPath para extração simples, JMESPath para transformação/projeção.


Problemas Comuns

Problema Causa Solução
Consulta retorna vazio Erro de digitação no caminho Verificar maiúsculas/minúsculas dos nomes de chaves
Filtro não funciona Diferença na versão da sintaxe Confirmar a versão de sintaxe suportada pela ferramenta
Índice do array fora dos limites Índice excede o intervalo Usar [*] ou verificar o comprimento do array
Muitos resultados recursivos .. correspondeu a todos os níveis Reduzir o escopo ou adicionar condições de filtro
Erro em chave com caracteres especiais Chave contém . ou - Usar sintaxe de colchetes ['key.name']

Resumo

JSONPath é uma ferramenta poderosa para trabalhar com dados JSON. Domine os seis elementos de sintaxe principais — $, ., [], *, .., ?() — e você poderá extrair dados com precisão de qualquer JSON aninhado. A ferramenta JSONPath fornece consultas em tempo real com destaque de posicionamento, enquanto o JMESPath e o Formatador JSON completam seu fluxo de trabalho de processamento de dados JSON.

#JSONPath#数据查询#嵌套#过滤#提取