O que é JSONPath?
JSONPath é uma linguagem de consulta para documentos JSON, o equivalente JSON do XPath para XML. Stefan Goessner propô-lo em 2007 como uma forma curta e legível de apontar para um nó dentro de uma árvore JSON sem escrever um analisador. Uma expressão começa com o seletor raiz $ e encadeia acessores de propriedade, subscritos de array, curingas, descida recursiva e condições de filtro até selecionar os nós pretendidos. Em 2024 o IETF publicou o RFC 9535 para padronizar a sintaxe que se tinha fragmentado entre implementações; este testador corre sobre jsonpath-plus, uma implementação JavaScript amplamente usada que cobre o rascunho Goessner, a maior parte do RFC 9535 e alguns operadores de extensão adicionais.
Como funciona o JSONPath
Uma expressão JSONPath lê-se da esquerda para a direita e percorre um documento JSON um passo de cada vez. Cada passo pega no conjunto de nós que sobreviveu ao passo anterior e reduz-o ainda mais. O pipeline de avaliação completo:
- Ancorar com o seletor raiz
$. Cada expressão começa aqui, apontando para o valor de nível superior, seja um objeto ou um array. Nomes de propriedade simples sem um$inicial não são JSONPath válido. - Entrar em membros filhos com notação de ponto (
$.store.book) ou notação de parênteses ($['store']['book']). A notação de parênteses é necessária quando uma chave contém um espaço, um hífen ou qualquer caractere que não seja um identificador válido. - Pesquisar todos os níveis de uma vez com o operador de descida recursiva
... A expressão$..authorrecolhe todos os valoresauthorem qualquer lugar da árvore, independentemente da profundidade. Este é o operador que JMESPath não tem. - Selecionar elementos de array por índice (
[0],[-1]para o último item em jsonpath-plus), fatiá-los com notação[start:end]([0:3]devolve os três primeiros), ou obter todos os elementos com o curinga[*]. - Filtrar elementos com um predicado dentro de
[?(...)]. Dentro do predicado,@refere-se ao elemento atual, por isso[?(@.price<10)]mantém apenas os itens cujo campopriceé menor que 10. Os filtros compõem-se com o resto do caminho, por isso pode filtrar e depois descer, ou descer e depois filtrar. - Escolher o formato de saída. Valores devolve os dados correspondidos em si. Caminhos devolve o JSONPath de cada correspondência para que possa ver o que o motor resolveu. Ponteiros devolve o equivalente RFC 6901 JSON Pointer para cada correspondência, útil quando o consumidor final usa JSON Patch ou um validador JSON Schema.
Por que usar este testador JSONPath?
- O seu JSON nunca sai do navegador. A consulta corre dentro da página, por isso fixtures de produção, PII de clientes e respostas de API pré-lançamento ficam na sua máquina.
- O motor é
jsonpath-plus9.x, a mesma biblioteca que suporta muitas suites de teste de produção e asserções de CI. Os resultados que vê aqui correspondem aos resultados que o seu pipeline de build irá ver. - Três modos de saída cobrem os consumidores finais mais comuns: Valores puros para copiar e colar, Caminhos para depurar a resolução do motor e Ponteiros RFC 6901 para fluxos de trabalho JSON Patch e JSON Schema.
- As expressões de filtro correm com
preventEval: true, por isso uma consulta colada não pode executar JavaScript arbitrário contra a página anfitriã. Isso importa quando a expressão veio de uma mensagem no Slack, de um ticket Jira ou da área de transferência de um colega.
Aplicações comuns do JSONPath
JSONPath aparece em qualquer lugar onde o código tem de extrair um campo de um payload JSON sem escrever uma descida recursiva à mão:
- Testes no Postman: o separador Testes no Postman expõe
pm.response.json()juntamente com acesso estilo JSONPath para asserções. As equipas escrevem uma única expressão como$.data.user.emailpara extrair um campo de uma resposta e assercioná-lo em CI. - Testes de carga k6: os scripts k6 chamam
jsonpath()dentro de um blococheck()para extrair valores de corpos de resposta e asserir limiares de SLA. A mesma expressão que provou um contrato no Postman pode impor um teste de carga no k6. - JSON DSL para transformações de dados: o AWS Step Functions avalia JSONPath dentro de
InputPath,ResultPatheParameterspara remodelar payloads de eventos entre estados. O Argo Workflows usa JSONPath emwithParampara distribuir tarefas por um array. Okubectl -o jsonpathdo Kubernetes usa a mesma sintaxe para extrair campos de objetos do cluster.
Exemplo prático
A fixture canónica de Goessner é o documento da livraria com quatro livros, cada um com category, author, title e price. Contra essa fixture, a expressão $.store.book[?(@.price<10)].title corre em três passos. Primeiro, $.store.book resolve para o array dos quatro livros. Depois, o filtro [?(@.price<10)] mantém apenas o livro com preço abaixo de 10 (a entrada de 8,95). Por último, .title extrai o título desse livro. O resultado é ["Sayings of the Century"]. Mudar para Caminhos devolve ["$['store']['book'][0]['title']"] e Ponteiros devolve ["/store/book/0/title"].
Prototipe as suas expressões aqui e depois coloque-as diretamente no Postman, k6, kubectl ou numa máquina de estados Step Functions. Cole, consulte, copie. Nada atravessa a rede.
O que é JSONPath?
JSONPath é uma linguagem de consulta para documentos JSON, análoga ao XPath para XML. Proposta por Stefan Goessner em 2007 e padronizada pelo IETF como RFC 9535 em 2024, usa uma sintaxe de expressão compacta que começa com $ (a raiz do documento) e suporta notação de ponto, subscritos de array, curingas, fatias, descida recursiva (..) e expressões de filtro ([?(...)]) para selecionar nós dentro de uma árvore JSON.
Como é que o JSONPath difere do JMESPath ou do jq?
Os três consultam JSON, mas as suas gramáticas e objetivos diferem. O JMESPath é o padrão da AWS CLI / SDK: mais restrito que o JSONPath, sem descida recursiva, concebido para projeção previsível sem efeitos secundários. O jq é uma linguagem de scripting Turing-completa que não só consulta JSON como o transforma, reduz e transmite. O JSONPath situa-se entre eles: mais expressivo que JMESPath graças à descida recursiva e filtros, mais leve que jq, e a sintaxe com maior suporte em ferramentas de teste de propósito geral (Postman, Playwright, REST Assured, kubectl, Step Functions). Este testador implementa JSONPath.
Que dialeto usa este testador?
Este testador corre o jsonpath-plus 9.x. Essa biblioteca implementa a especificação Goessner de 2007, cobre a maior parte do RFC 9535 e adiciona operadores de extensão como verificações de tipo (@.string(), @.number(), @.boolean()) e navegação para o pai (^). O flag preventEval: true está sempre ativo, por isso os predicados de filtro correm através de um interpretador seguro em vez do eval() embutido do JavaScript. Uma consulta colada não pode executar código arbitrário contra esta página.
Posso copiar valores individuais correspondidos?
Sim. O botão Copiar para a área de transferência copia o bloco de resultado completo como um array JSON. Para obter um único valor, mude o modo de saída para Valores, selecione a linha que pretende na área de texto de resultado e use o atalho de cópia normal do navegador (Ctrl/Cmd + C). A saída é texto JSON simples, por isso cola facilmente num editor de código, num terminal, num teste Postman ou numa mensagem Slack.