Skip to content

Testador JSONPath Grátis — Avalie Consultas Online

Teste expressões JSONPath em qualquer JSON na hora. Motor padrão RFC 9535 mais modo Clássico (Goessner), vistas Valores / Caminhos / Ambos, caminhos normalizados, sem eval. 100% privado, roda no navegador, sem upload.

Sem rastreamento Roda no navegador Grátis
Toda a avaliação roda localmente no seu navegador. Seu JSON e sua expressão nunca deixam este dispositivo. Sem eval, sem upload.
Motor
 
Folha de referência JSONPath
$Elemento raiz
@Elemento atual (em filtros)
.nameMembro filho
..nameDescida recursiva
[*]Todos os elementos / membros
[0]Índice de array
[0:2]Fatia de array [start:end:step]
[a,b]União de nomes / índices
[?(@.k>1)]Expressão de filtro
length()Função RFC 9535: length / count / match / search / value
Revisado quanto à fidelidade da gramática RFC 9535, à correção dos caminhos normalizados, à paridade semântica de motor duplo nos caminhos comuns e à divergência documentada nos casos extremos, à segurança sem eval (fechando CVE-2024-21534 e CVE-2025-1302) e à acessibilidade (papéis ARIA, alternador de motor radiogroup, anúncios de resultado para leitores de tela, manipulação de JSON LTR sob layouts RTL). — Equipe de Ferramentas de Dados da Go Tools · Jun 13, 2026

O Que É um Testador JSONPath?

Um testador JSONPath é uma ferramenta que permite escrever uma expressão JSONPath, colar um documento JSON e ver exatamente quais nós a expressão seleciona — tanto os valores correspondentes quanto suas localizações precisas — sem escrever código ou executar um script. Para desenvolvedores, ele encurta o ciclo de minutos para milissegundos: ajuste o caminho, veja o resultado mudar e entregue a consulta com confiança.

JSONPath é uma linguagem de consulta para JSON, o análogo em JSON do XPath para XML. Uma expressão é construída a partir de um pequeno alfabeto de seletores. $ é a raiz do documento. Um ponto ou um colchete entra num filho: $.store ou $['store']. O ponto duplo .. é a descida recursiva — ele busca em todos os níveis da árvore. O curinga * seleciona todos os elementos ou membros. Os colchetes carregam índices de array ([0]), fatias ([start:end:step]), uniões ([a,b]) e expressões de filtro ([?(@.price < 10)], onde @ é o elemento em teste). Com essas peças você pode extrair um único campo de uma resposta de API profundamente aninhada, fazer asserções sobre valores em testes, dirigir transformações de dados em sistemas como Kubernetes, AWS Step Functions e Azure Logic Apps, ou extrair dados estruturados de JSON irregular — tudo sem código de travessia imperativo. O JSONPath também é famosamente inconsistente entre implementações, que é exatamente o problema que um bom testador revela antes que ele chegue à produção.

Este testador traz dois motores. O padrão é um motor RFC 9535: o RFC 9535 é a especificação formal de JSONPath do IETF de fevereiro de 2024, a primeira vez que a linguagem foi padronizada com precisão após quinze anos de implementações divergentes. Ele define uma gramática exata, o conceito de caminhos normalizados para resultados e cinco funções padrão — length(), count(), match(), search(), value(). Nosso motor RFC 9535 é uma implementação sem dependências que não usa eval, então analisa e interpreta expressões com sua própria gramática em vez de compilá-las para JavaScript. O segundo motor é o Clássico (Goessner), o dialeto de facto de 2007 que a maioria das ferramentas e bibliotecas online mais antigas implementa; troque para ele para reproduzir resultados de uma ferramenta como o jsonpath.com ou para executar uma expressão que você copiou de código legado. Os dois dialetos concordam nos caminhos comuns, mas divergem nos casos extremos — espaços em branco e aspas em filtros, ordenação de uniões, como membros ausentes são comparados e quais funções existem — então poder alternar entre eles num só lugar é a forma mais rápida de diagnosticar por que uma expressão se comporta de modo diferente do esperado.

O que o testador revela além dos valores brutos: o resultado de uma consulta JSONPath é uma nodelist, e esta ferramenta pode mostrá-lo de três formas. A vista Valores renderiza os nós correspondentes como um array JSON, exatamente o que você consumiria em código. A vista Caminhos renderiza o caminho normalizado de cada correspondência — uma localização canônica, com aspas e colchetes, como $['store']['book'][0]['title'], que identifica exclusivamente onde no documento o valor reside, não importa como a expressão foi escrita. Duas expressões que selecionam o mesmo nó produzem o mesmo caminho normalizado, o que torna a vista Caminhos valiosíssima para depuração. A vista Ambos mostra valores e caminhos lado a lado. Uma linha de estatísticas informa quantos nós corresponderam.

A segurança é uma preocupação de primeira classe aqui. Muitos avaliadores JSONPath online rodam num servidor ou incorporam uma biblioteca que avalia predicados de filtro com o eval do JavaScript — o desenho que produziu vulnerabilidades de execução remota de código rastreadas como CVE-2024-21534 e CVE-2025-1302 em pacotes JSONPath amplamente usados. Esta ferramenta não usa eval algum. O motor RFC 9535 não tem caminho de eval, e o motor Clássico é construído sobre uma versão corrigida e fixada do jsonpath-plus com eval explicitamente desativado. Isso fecha a classe de bugs de RCE e permite que a ferramenta rode sob uma Content-Security-Policy estrita que proíbe unsafe-eval. Cada avaliação é local: seu JSON e sua expressão nunca deixam a página, nunca são registrados e nunca são gravados em disco — apenas suas preferências de motor e vista persistem no localStorage. Isso torna a ferramenta segura para payloads de API proprietários, logs redigidos, configuração interna e qualquer dado com um esquema que você não colaria num serviço apoiado em servidor.

Se lidar com JSON é sua tarefa, combine isto com as outras ferramentas JSON do site: formate e embeleze sua entrada com o Formatador JSON, compare dois documentos com o JSON Diff, verifique um payload contra um esquema com o Validador de JSON Schema ou transforme uma resposta de amostra em interfaces tipadas com o JSON para TypeScript.

// The expression you build in this tester maps straight onto the
// RFC 9535 reference library used under the hood.
import { query, paths } from 'jsonpath-rfc9535';

const document = {
  store: {
    book: [
      { title: 'Sayings of the Century', author: 'Nigel Rees', price: 8.95 },
      { title: 'Sword of Honour', author: 'Evelyn Waugh', price: 12.99 },
      { title: 'Moby Dick', author: 'Herman Melville', price: 8.99 },
      { title: 'The Lord of the Rings', author: 'J. R. R. Tolkien', price: 22.99 }
    ]
  }
};

// Values: query(document, path) returns the matched values directly.
const titles = query(document, '$.store.book[*].title');
// → ['Sayings of the Century', 'Sword of Honour', 'Moby Dick', 'The Lord of the Rings']

// Filter: books cheaper than 10.
const cheap = query(document, '$.store.book[?(@.price < 10)].title');
// → ['Sayings of the Century', 'Moby Dick']

// Normalized paths: paths(document, path) returns where each match lives.
const authorPaths = paths(document, '$..author');
// → ["$['store']['book'][0]['author']", "$['store']['book'][1]['author']", ...]

// RFC 9535 functions like length() are used INSIDE filters, not as a segment.
const longTitles = query(document, '$.store.book[?length(@.title) > 15]');
// → the two books whose title is longer than 15 characters

Principais Recursos

Motor Padrão RFC 9535 (Sem Eval)

O motor padrão implementa o RFC 9535, a especificação formal de JSONPath do IETF de 2024 — gramática exata, caminhos normalizados e as cinco funções padrão. Ele é sem dependências e não usa eval, então analisa e interpreta expressões com sua própria gramática em vez de compilá-las para JavaScript. Roda sob uma Content-Security-Policy estrita.

Modo de Compatibilidade Clássico (Goessner)

Um único botão alterna para um motor compatível com Goessner (construído sobre o jsonpath-plus, com eval desativado) para que expressões copiadas de ferramentas mais antigas como o jsonpath.com se comportem como você as viu lá. Alterne entre RFC 9535 e Clássico para comparar resultados e diagnosticar por que um caminho corresponde de forma diferente entre os dialetos.

Três Vistas de Resultado: Valores, Caminhos, Ambos

Valores renderiza os nós correspondentes como um array JSON, exatamente o que você consome em código. Caminhos renderiza o caminho normalizado de cada correspondência, como $['store']['book'][0]['title']. Ambos os mostra lado a lado para que você possa mapear cada valor à sua localização precisa. A vista ativa persiste entre sessões.

Caminhos Normalizados para Cada Correspondência

Cada resultado carrega seu caminho normalizado canônico, com aspas e colchetes — a forma do RFC 9535 de identificar exclusivamente a localização de um nó, independentemente de como a expressão foi escrita. Duas expressões que atingem o mesmo nó produzem o mesmo caminho normalizado, o que torna direta a depuração de consultas ambíguas.

Suporte Completo de Seletores

Raiz $, elemento atual @, filho .name, descida recursiva ..name, curinga [*], índice de array [0], fatia [start:end:step], união [a,b] e expressões de filtro [?()] com operadores de comparação e lógicos. Uma folha de referência integrada documenta cada seletor para que você nunca precise sair da página para consultar um.

Extensões de Função do RFC 9535

Chame length(), count(), match(), search() e value() dentro de expressões — conte os elementos de um array, teste uma string contra um padrão I-Regexp ou filtre pelo tamanho de uma lista aninhada. Essas funções padrão estão disponíveis no motor padrão; a ferramenta avisa para você trocar de motor se as invocar no modo Clássico.

Formatar, Enviar e Exemplos

Formatar JSON embeleza sua entrada para que a estrutura fique legível antes de você consultar. Enviar lê um arquivo .json ou .txt inteiramente no navegador — ele nunca é enviado a lugar nenhum. O menu Exemplos carrega expressões iniciais conhecidas como corretas contra dados de amostra para que você veja o motor funcionando antes de adaptar um caminho.

Compartilhamento por Permalink (Sem Upload)

Copiar link codifica o JSON, a expressão, o motor e a vista no fragmento da URL. Os navegadores nunca transmitem fragmentos de URL nas requisições, então um link compartilhado reproduz seu estado completo na máquina do destinatário sem tocar nos servidores do go-tools.org. Autossuficiente e fácil de auditar para depuração colaborativa.

100% Privado, Somente no Navegador

Seu JSON e sua expressão nunca deixam seu dispositivo. Sem requisições de rede, sem registro, sem análise sobre o que você digita — verifique em DevTools → Rede. Apenas as preferências de motor e vista persistem no localStorage. Seguro para payloads proprietários, logs redigidos e qualquer dado que você não colaria no jsonpath.com.

Exemplos Resolvidos

Selecionar todos os títulos de livro de um documento de livraria

$.store.book[*].title
["Sayings of the Century", "Sword of Honour", "Moby Dick", "The Lord of the Rings"]

Cole o clássico JSON da livraria de Goessner, digite a expressão e a vista Valores retorna um array JSON com os quatro títulos. Alterne para Caminhos para ver cada resultado como um caminho normalizado, como $['store']['book'][0]['title']. O curinga [*] itera por cada elemento do array book; .title projeta um membro de cada um.

Filtrar livros mais baratos que 10 com uma expressão de filtro

$.store.book[?(@.price < 10)].title
["Sayings of the Century", "Moby Dick"]

O seletor de filtro [?()] mantém apenas os elementos do array em que o predicado é verdadeiro; @ é o elemento atual. Contra os dados da livraria (preços 8.95, 12.99, 8.99, 22.99) dois livros qualificam. Ambos os motores aceitam este formato, mas note que o Clássico (Goessner) escreve o mesmo filtro como [?(@.price<10)] — troque de motor se você copiou uma expressão de uma ferramenta mais antiga.

Percorrer toda a árvore com descida recursiva

$..author
["Nigel Rees", "Evelyn Waugh", "Herman Melville", "J. R. R. Tolkien"]

O operador .. desce por todos os níveis do documento e coleta cada membro author onde quer que apareça, independentemente da profundidade do aninhamento. A descida recursiva é a forma mais rápida de extrair um campo de uma estrutura profundamente aninhada ou irregular sem soletrar o caminho completo.

Fatiar um array com [start:end:step]

$.store.book[0:2].title
["Sayings of the Century", "Sword of Honour"]

As fatias de array seguem a mesma convenção semiaberta [start:end] do Python e do JavaScript: do índice 0 até, mas sem incluir, o índice 2, retornando os dois primeiros livros. Adicione um terceiro campo para um passo — $.store.book[::2] pega um elemento sim, outro não. O limite final é exclusivo, uma armadilha comum de erro por um, que a vista Caminhos torna evidente.

Filtrar por comprimento do título com a função length() do RFC 9535

$.store.book[?length(@.title) > 15]
[{"title": "Sayings of the Century", "author": "Nigel Rees", "price": 8.95}, {"title": "The Lord of the Rings", "author": "J. R. R. Tolkien", "price": 22.99}]

length() é uma das cinco funções padrão do RFC 9535 e só é válida dentro de uma expressão de filtro [?...] — nunca como um segmento de caminho autônomo como $.store.book.length(), que a gramática do RFC 9535 rejeita (essa forma de segmento é uma extensão do jsonpath-plus, não JSONPath padrão). Aqui o filtro mantém cada livro cujo título tem mais de 15 caracteres; contra os dados da livraria, os títulos com mais de 15 caracteres são selecionados (por exemplo "Sayings of the Century" e "The Lord of the Rings"), enquanto os mais curtos como "Moby Dick" e "Sword of Honour" são excluídos. count(), match(), search() e value() também são usadas dentro de filtros. Essas funções são um recurso do RFC 9535 — troque para o motor padrão (o padrão) para usá-las; o modo Clássico (Goessner) não as implementa.

Selecionar uma união de dois membros nomeados

$.store.book[0]['title','author']
["Sayings of the Century", "Nigel Rees"]

Um seletor de união [a,b] reúne vários filhos numa só expressão. Aqui ele extrai tanto o título quanto o autor do primeiro livro. As uniões também funcionam com índices de array — [0,2] pega o primeiro e o terceiro elementos. A vista Ambos emparelha cada valor com seu caminho normalizado, para que você veja exatamente qual membro produziu qual resultado.

Como Usar o Testador JSONPath

  1. 1

    Cole ou envie seu JSON

    Arraste o JSON para a caixa de entrada, cole-o ou clique em Enviar para carregar um arquivo .json / .txt do disco. Formatar JSON reindenta o documento. JSON inválido é sinalizado em linha com uma mensagem do analisador antes de você consultar.

  2. 2

    Escolha um motor

    RFC 9535 (o padrão IETF de 2024, sem eval) é o padrão. Troque para Clássico (Goessner) quando estiver executando uma expressão copiada de uma ferramenta mais antiga, como o jsonpath.com, para que os resultados correspondam ao que você viu lá.

  3. 3

    Digite sua expressão JSONPath

    O $ inicial já é mostrado para você. Comece com um caminho de filho como .store.book[*].title, um índice como [0], uma descida recursiva como ..author ou um filtro como [?(@.price < 10)]. Os resultados atualizam ao vivo enquanto você digita.

  4. 4

    Alterne a vista de resultado

    Valores mostra um array JSON dos valores correspondentes. Caminhos mostra o caminho normalizado de cada correspondência, como $['store']['book'][0]['title']. Ambos os mostra lado a lado para que você possa mapear cada valor à sua localização exata no documento.

  5. 5

    Copie o resultado ou compartilhe um permalink

    Copiar resultado coloca a saída na sua área de transferência. Copiar link codifica o JSON, a expressão, o motor e a vista num fragmento de URL (sem upload) para que um colega possa reproduzir a consulta exata localmente na própria máquina.

Erros Comuns de JSONPath

Esqueceu a raiz $ inicial

Toda expressão JSONPath começa na raiz, escrita como $. Omiti-la (ou escrever o caminho como se o $ fosse implícito) faz a maioria dos motores rejeitar a expressão. O testador mostra o $ para você, então comece sua entrada com o próximo seletor — um ponto, um colchete ou uma descida recursiva.

✗ Incorreto
store.book[*].title  →  inválido (sem raiz)
✓ Correto
$.store.book[*].title  →  seleciona todos os títulos

Erro de fatia por um — esperava o índice final incluído

As fatias são semiabertas: [start:end] vai até, mas sem incluir, end. [0:2] retorna dois elementos (índices 0 e 1), não três. Para incluir o último elemento por índice, use [start:] ou empurre o limite final um além dele.

✗ Incorreto
$.store.book[0:2]  →  os DOIS primeiros livros, não três
✓ Correto
$.store.book[0:3]  →  os três primeiros livros (índices 0,1,2)

Usou uma expressão Clássica no motor RFC 9535 (ou vice-versa)

Uma expressão copiada do jsonpath.com ou do jsonpath-plus pode ser analisada ou corresponder de forma diferente sob o RFC 9535 por causa de diferenças de filtro, união e função. Se os resultados parecerem errados, vire o seletor de motor para corresponder ao dialeto para o qual a expressão foi escrita.

✗ Incorreto
Filtro Clássico rodado sob RFC 9535  →  erro de análise ou nós inesperados
✓ Correto
Trocar o motor para Clássico (Goessner)  →  reproduz o resultado original

Chamou uma função do RFC 9535 como segmento autônomo

length(), count(), match(), search() e value() são extensões de função do RFC 9535 que só são válidas dentro de um filtro [?...]. Uma chamada em segmento autônomo como $.store.book.length() é rejeitada pela gramática do RFC 9535 (é uma extensão do jsonpath-plus, não padrão). Chame a função dentro de um filtro e use o motor RFC 9535 padrão — o motor Clássico (Goessner) não implementa essas funções.

✗ Incorreto
$.store.book.length()  →  erro de análise (não é um segmento RFC 9535 válido)
✓ Correto
$.store.book[?length(@.title) > 15]  →  livros com título acima de 15 caracteres

Esqueceu o @ dentro de uma expressão de filtro

Dentro de um filtro [?()], o elemento atual é @, não $. Escrever $.price refere-se de volta à raiz do documento, em vez do elemento em teste, então o filtro não seleciona nada ou seleciona tudo. Use @ para endereçar membros do elemento sendo filtrado.

✗ Incorreto
$.store.book[?($.price < 10)]  →  escopo errado
✓ Correto
$.store.book[?(@.price < 10)]  →  livros abaixo de 10

Colocou aspas no nome de um membro com a sintaxe errada

A notação de colchetes precisa de aspas em torno de chaves de string: $['store'] ou $.store ambos funcionam, mas $[store] (sem aspas nos colchetes) é um erro de índice/identificador. Use aspas dentro dos colchetes para qualquer chave com espaços, pontos ou caracteres especiais: $['first name'].

✗ Incorreto
$[store][book]  →  seletores de colchete inválidos
✓ Correto
$['store']['book']  →  o mesmo que $.store.book

Esperava que a descida recursiva parasse no primeiro nível

$..author não para no topo — ele coleta cada membro author em qualquer profundidade. Se você quer apenas filhos diretos, soletre o caminho. A descida recursiva sobre um documento grande pode retornar muito mais nós do que o pretendido.

✗ Incorreto
$..price  →  todo price em qualquer ponto da árvore
✓ Correto
$.store.book[*].price  →  apenas preços de livros

Quem Usa Esta Ferramenta

Extrair Campos de uma Resposta de API
Extraia IDs de requisição, atributos de recursos aninhados ou uma lista de nomes de um payload JSON sem escrever código de travessia. Construa o caminho aqui contra uma resposta de amostra, confirme que ele retorna exatamente os nós que você quer na vista Valores e depois cole a expressão validada na sua aplicação ou teste.
Escrever Asserções para Testes de Integração
Muitos frameworks de teste e ferramentas de teste de contrato (REST Assured, Karate, Postman) usam JSONPath para fazer asserções sobre corpos de resposta. Rascunhe o caminho da asserção aqui, verifique que ele seleciona o nó certo contra uma resposta real e copie-o para o seu teste — pegando um caminho errado antes que a suíte fique vermelha.
Configurar Transformações de Dados em Pipelines
Kubernetes, AWS Step Functions, Azure Logic Apps e muitas ferramentas de ETL aceitam JSONPath para endereçar campos em payloads de evento. Prototipe o caminho exato contra um evento representativo aqui, confirme que ele resolve e coloque-o na configuração do seu pipeline com a confiança de que aponta para onde você pretende.
Reproduzir um Resultado do jsonpath.com de Forma Privada
Tem uma expressão de um avaliador apoiado em servidor, mas não pode colar seus dados num site de terceiros? Troque para o modo Clássico (Goessner), carregue seu JSON e reproduza o mesmo resultado localmente — nenhum payload deixa o seu navegador, então dados proprietários permanecem na sua máquina.
Migrar Expressões Legadas para o RFC 9535
Está migrando para um sistema que anuncia conformidade com o RFC 9535? Execute uma expressão legada no modo Clássico e depois alterne para o motor RFC 9535 para ver se ela ainda é analisada e corresponde aos mesmos nós. A comparação de motor duplo aponta as diferenças de filtro, união e função que você de outra forma encontraria em produção.
Depurar Por Que um Caminho Retorna os Nós Errados
Um caminho que seleciona demais ou de menos é difícil de raciocinar apenas pelos valores. Troque para a vista Caminhos para ver a localização normalizada de cada correspondência — o índice exato do array, a cadeia exata de membros — e a fatia com erro por um ou a descida recursiva perdida fica óbvia imediatamente.
Ensinar ou Revisar JSONPath
Abra uma expressão funcional contra dados de amostra e percorra-a seletor por seletor, alternando entre Valores e Caminhos para que o aprendiz veja tanto o que é selecionado quanto onde reside. A folha de referência e os exemplos resolvidos dão uma referência estruturada para revisão de código ou integração de novos membros.

Notas de Motor e Algoritmo

Motor RFC 9535 (jsonpath-rfc9535, Sem Dependências)
O motor padrão implementa a gramática do IETF RFC 9535 diretamente: ele tokeniza e analisa a expressão numa árvore de sintaxe abstrata e a interpreta contra o documento. Não há eval nem construtor Function em parte alguma do caminho, então ele é imune à classe de bugs de injeção via eval e roda sob uma Content-Security-Policy estrita.
Motor Clássico (jsonpath-plus, eval Desativado)
O motor Clássico (Goessner) é o jsonpath-plus, fixado numa versão corrigida (>= 10.4.0) e construído com a opção eval explicitamente definida como false. Isso mantém a compatibilidade com o dialeto de Goessner enquanto fecha os vetores de execução remota de código rastreados como CVE-2024-21534 e CVE-2025-1302, que afetavam o caminho de filtro baseado em eval padrão da biblioteca.
Geração de Caminhos Normalizados
Cada correspondência é informada com seu caminho normalizado do RFC 9535 — uma forma canônica usando notação de colchetes com aspas simples ($['store']['book'][0]['title']) e índices de array como inteiros puros. Os caminhos normalizados são estáveis e únicos por nó, então expressões equivalentes produzem caminhos idênticos, dos quais as vistas Caminhos e Ambos dependem para uma identificação inequívoca de resultados.
Chunks de Motor Carregados sob Demanda
Ambos os motores são carregados como chunks de JavaScript separados apenas quando selecionados pela primeira vez, então a página inicial permanece leve e o motor que você não usa nunca é baixado. Trocar de motor reavalia a expressão atual contra o documento atual imediatamente, sem recarregar a página.
Leitura de Arquivos Locais e Formatação de JSON
O botão Enviar usa a API FileReader do navegador para ler um arquivo .json ou .txt na entrada inteiramente no lado do cliente — o arquivo nunca é transmitido. Formatar JSON analisa e reserializa a entrada com indentação de dois espaços, exibindo erros de análise em linha para que JSON malformado seja detectado antes da avaliação.
Permalinks via Fragmento de URL (Nunca Transmitidos)
O estado de compartilhamento é codificado no fragmento location.hash, carregando o JSON, a expressão, o motor ativo e a vista de resultado. Os navegadores nunca incluem o fragmento nas requisições HTTP, então os servidores do go-tools.org recebem zero dados quando um permalink é aberto; a hidratação acontece inteiramente no dispositivo do destinatário.

Boas Práticas de JSONPath

Escolha o Motor que Corresponde ao Seu Alvo
Se o seu sistema downstream anuncia conformidade com o RFC 9535, escreva e valide contra o motor RFC 9535. Se você está reproduzindo ou mantendo uma expressão de uma ferramenta ou biblioteca mais antiga, use Clássico (Goessner). Validar contra o dialeto errado é o motivo mais comum de um caminho que funcionou no testador falhar em produção.
Verifique com a Vista Caminhos, Não Apenas Valores
A vista Valores diz o que correspondeu; a vista Caminhos diz onde. Quando uma consulta retorna valores de aparência correta, ela ainda pode estar selecionando-os da localização errada — uma descida recursiva perdida ou um curinga amplo demais. Confira os caminhos normalizados para confirmar que a expressão atinge exatamente os nós que você pretende.
Atente para o Fim Exclusivo de uma Fatia
[0:2] seleciona os índices 0 e 1, não 0 até 2 — o limite final é exclusivo, assim como no Python e no JavaScript. Erros de fatia por um são o bug de JSONPath mais frequente. Use a vista Caminhos para ler o índice exato de cada elemento selecionado e confirmar o limite antes de entregar.
Prefira um Caminho Explícito à Descida Recursiva Quando Puder
$..price é conveniente, mas corresponde a todo price em qualquer ponto do documento, inclusive os que você não pretendia. Quando você conhece a estrutura, soletre o caminho ($.store.book[*].price) para que a consulta permaneça precisa e previsível à medida que os dados crescem. Reserve o .. para formatos genuinamente irregulares ou desconhecidos.
Mantenha Espaços em Branco e Aspas Consistentes nos Filtros
O RFC 9535 segue sua gramática exatamente para expressões de filtro, enquanto o dialeto clássico é mais permissivo. Escreva filtros de forma limpa — coloque literais de string entre aspas simples ('fiction'), mantenha os operadores espaçados e evite depender de análise leniente — para que a mesma expressão seja avaliada da mesma forma, independentemente de qual motor ou biblioteca acabe executando-a.

Perguntas Frequentes

Meu JSON ou minha expressão JSONPath são enviados ao seu servidor?
Não. Cada avaliação roda em JavaScript dentro do seu navegador. Seu documento JSON e sua expressão JSONPath não são enviados, não são registrados, não são gravados em disco e não são transmitidos a nenhum terceiro. Apenas suas preferências de interface — o motor ativo (RFC 9535 ou Clássico) e a vista de resultado (Valores / Caminhos / Ambos) — são salvas no localStorage para que a página as lembre na próxima visita; o JSON e a expressão em si nunca são persistidos. Você pode verificar abrindo DevTools → Rede: digitar em qualquer das caixas dispara zero requisições. Isso torna esta ferramenta segura para payloads de API proprietários, amostras de log redigidas, configuração interna e qualquer outra coisa que você não colaria num avaliador apoiado em servidor como o jsonpath.com.
O que é JSONPath e para que serve?
JSONPath é uma linguagem de consulta para JSON, do mesmo modo que o XPath é uma linguagem de consulta para XML. Você escreve uma expressão de caminho — por exemplo $.store.book[*].author — e o avaliador retorna cada valor do documento que o caminho seleciona. Ela é usada para extrair campos específicos de respostas de API, para fazer asserções sobre valores em testes de integração, para configurar transformações de dados em ferramentas como Jenkins, Kubernetes, AWS Step Functions e Azure Logic Apps, e para extrair dados de JSON grande ou irregular sem escrever código de travessia imperativo. Uma expressão é construída a partir de um eixo de seletores: $ (a raiz), . ou [] (acesso a filho), .. (descida recursiva), * (curinga), [start:end:step] (fatia de array), [a,b] (união) e [?()] (filtro). Este testador avalia a expressão ao vivo e mostra tanto os valores correspondentes quanto seus caminhos normalizados.
Qual é a diferença entre o RFC 9535 e a sintaxe clássica de Goessner?
O JSONPath clássico é a sintaxe de facto que Stefan Goessner publicou em 2007. Ela passou a ser amplamente implementada, mas nunca foi formalmente padronizada, de modo que comportamentos sutis — como os filtros são escritos, como funcionam as uniões e a função de raiz, como valores ausentes são comparados — divergiram entre bibliotecas. O RFC 9535, publicado pelo IETF em fevereiro de 2024, é a primeira especificação formal do JSONPath. Ele estabelece uma gramática precisa, define caminhos normalizados para resultados e adiciona funções padrão (length, count, match, search, value). Os dois são próximos, mas não idênticos: o RFC 9535 é mais rigoroso quanto a espaços em branco e aspas nos filtros, define a semântica de comparação para membros ausentes e rejeita algumas construções permissivas que o dialeto clássico tolerava. Esta ferramenta usa por padrão o motor RFC 9535 (uma implementação sem dependências, sem eval) e permite alternar para um motor Clássico (Goessner) por retrocompatibilidade.
Por que a mesma expressão retorna resultados diferentes nos dois motores e como uso uma expressão copiada do jsonpath.com?
Porque o RFC 9535 e o dialeto clássico de Goessner têm regras genuinamente diferentes nos casos extremos — espaços em branco e aspas em filtros, ordenação de uniões, como membros ausentes são comparados e quais funções existem. Uma expressão escrita para um motor pode corresponder de forma diferente (ou falhar ao ser analisada) no outro. Se você copiou uma expressão de uma ferramenta mais antiga, como jsonpath.com, jsonpath-plus ou um serviço baseado em Jayway, troque o seletor de motor no topo para Clássico (Goessner): esse modo executa um avaliador compatível com Goessner (construído sobre o jsonpath-plus, com eval desativado) e reproduzirá o comportamento que você viu na ferramenta de origem. Se você está escrevendo uma expressão nova ou mirando um sistema que anuncia conformidade com o RFC 9535, mantenha o motor RFC 9535 padrão. A folha de referência e os exemplos integrados foram escritos para serem avaliados de forma idêntica em ambos os motores, dando a você um ponto de partida conhecido como correto.
Como funcionam as expressões de filtro [?()]?
Um seletor de filtro mantém apenas os elementos do array (ou membros do objeto) para os quais um predicado é verdadeiro. Dentro do filtro, @ refere-se ao elemento atual em teste. $.store.book[?(@.price < 10)] retorna todo livro cujo membro price é menor que 10. Você pode comparar com literais (@.isbn, @.category == 'fiction'), combinar condições com && e ||, testar a existência de um membro (@.isbn seleciona elementos que tenham um isbn) e, no RFC 9535, usar as extensões de função dentro do predicado (?(length(@.tags) > 2)). Os operadores de comparação são ==, !=, <, <=, >, >=. O RFC 9535 é preciso quanto a tipos: comparar um membro ausente a um valor é bem definido e não gera exceção. O dialeto clássico é mais permissivo quanto a espaços em branco, então [?(@.price<10)] e [?(@.price < 10)] são ambos aceitos ali; o RFC 9535 segue sua gramática exatamente.
O que faz a descida recursiva (..)?
O operador .. busca em todos os níveis do documento, não apenas nos filhos imediatos. $..author coleta cada membro author onde quer que ocorra — dentro do objeto de nível superior, dentro de arrays, dentro de objetos aninhados, em qualquer profundidade. É a forma mais rápida de extrair um campo de uma estrutura profundamente aninhada ou de formato irregular quando você não quer (ou não pode) soletrar o caminho completo. Você pode seguir .. com qualquer seletor: $..book[*] encontra cada elemento de cada array book em qualquer ponto da árvore, $..* enumera cada valor do documento e $..['price'] reúne todos os membros price. A descida recursiva pode corresponder a muita coisa — alterne para a vista Caminhos para ver exatamente de onde veio cada resultado por meio do seu caminho normalizado.
O que são as funções length(), count(), match(), search() e value() do RFC 9535?
O RFC 9535 define cinco extensões de função padrão, e a regra principal é que elas só podem ser chamadas dentro de uma expressão de filtro [?...] — nunca como um segmento de caminho autônomo. Escrever $.store.book.length() não é RFC 9535 válido e a gramática padrão o rejeita (essa forma de chamada em segmento é uma extensão do jsonpath-plus, não parte da especificação). length() retorna o comprimento de uma string, array ou objeto, então você a usa para filtrar por tamanho: $.store.book[?length(@.title) > 15] mantém livros cujo título tem mais de 15 caracteres. count() retorna o número de nós que uma nodelist contém, novamente dentro de um filtro: $.store.book[?(count(@.authors) > 1)]. match() testa se uma string corresponde a uma expressão regular contra todo o valor, e search() testa uma correspondência em qualquer ponto da string — ambas recebem um padrão I-Regexp. value() converte uma nodelist de nó único em seu valor para que possa ser usada numa comparação. Essas funções fazem parte do padrão RFC 9535, então estão disponíveis no motor padrão; o motor Clássico (Goessner) não as implementa. Se uma expressão baseada em função falhar, confirme que você a está chamando dentro de um filtro e que o seletor de motor está em RFC 9535.
Como funcionam as fatias de array [start:end:step]?
As fatias usam a mesma convenção semiaberta do Python e do JavaScript: [start:end] seleciona do índice start até, mas sem incluir, o índice end, então [0:2] retorna os dois primeiros elementos (índices 0 e 1). Omita um limite para ir até a borda — [2:] do índice 2 em diante, [:3] para os três primeiros. Um índice negativo conta a partir do fim: [-1:] seleciona o último elemento. O terceiro campo opcional é um passo — [::2] pega um elemento sim, outro não, [::-1] inverte (em motores que suportam passos negativos). O limite final exclusivo é o bug de fatia mais comum; a vista Caminhos mostra o índice exato de cada elemento selecionado para que você confirme o limite num relance.
O que é um seletor de união e como seleciono várias chaves de uma vez?
Um seletor de união lista vários nomes ou índices dentro de um único colchete e reúne todos eles: $['title','author'] seleciona ambos os membros de um objeto, e $.store.book[0,2] seleciona o primeiro e o terceiro elementos do array book. Você pode misturá-lo com outros seletores — $.store.book[*]['title','price'] extrai o título e o preço de cada livro. As uniões são úteis quando você quer uma projeção fixa de alguns campos em vez de um objeto inteiro ou de um curinga. A vista Ambos é a forma mais clara de ler um resultado de união porque emparelha cada valor selecionado com seu caminho normalizado, de modo que você sabe qual nome ou índice produziu cada entrada.
Posso compartilhar uma consulta JSONPath e seu JSON por meio de um link?
Sim — e o link não envolve nenhuma ida e volta ao servidor. Clique em Copiar link na barra de ações: o testador codifica o JSON, a expressão, o motor ativo e a vista de resultado no fragmento (hash) da URL. Quem abrir o link hidrata a página com o mesmo estado, localmente na própria máquina. Como os dados ficam no fragmento de hash, eles nunca são transmitidos ao servidor go-tools.org — os navegadores não enviam o fragmento nas requisições HTTP — e nunca aparecem em nossos logs de acesso. O comprimento do link cresce com o tamanho do JSON, então, para documentos grandes, compartilhe apenas a expressão e deixe que o destinatário cole seus próprios dados, ou use o botão Enviar para carregar um arquivo localmente. Isso torna os permalinks seguros para depuração colaborativa sem expor o payload a nenhum backend.
Há um tamanho máximo de JSON?
A avaliação é limitada pela memória do seu navegador, em vez de um teto rígido, mas o ponto ideal prático são documentos de até alguns megabytes — confortavelmente maiores que quase qualquer resposta de API individual. Arrays muito grandes com seletores amplos (um curinga recursivo $..* sobre dezenas de milhares de nós) produzirão um conjunto de resultados grande que leva mais tempo para renderizar; restrinja a expressão para manter a saída legível. O botão Enviar lê um arquivo .json ou .txt inteiramente no navegador (ele nunca é enviado a lugar nenhum), e Formatar JSON reindenta a entrada para que você possa ler a estrutura antes de consultá-la. Para pipelines de dados de vários megabytes, valide sua expressão aqui contra uma fatia representativa e depois execute o mesmo caminho no código da sua aplicação ou numa ferramenta de linha de comando como o jq.
Em que isto difere do jsonpath.com e é seguro — sem eval?
Quatro diferenças. (1) Privacidade: o jsonpath.com e a maioria dos avaliadores online rodam num servidor ou incorporam uma biblioteca que avalia filtros com o eval do JavaScript; esta ferramenta roda inteiramente no seu navegador e não usa eval algum. O motor RFC 9535 padrão é uma implementação sem dependências, sem caminho de eval, e o motor Clássico (Goessner) é construído sobre o jsonpath-plus fixado numa versão corrigida com eval explicitamente desativado — fechando a classe de bugs de execução remota de código rastreada como CVE-2024-21534 e CVE-2025-1302. Isso também significa que a ferramenta funciona sob uma Content-Security-Policy estrita. (2) Padrões: este é um dos poucos testadores online que oferece um verdadeiro motor RFC 9535, não apenas o dialeto legado de Goessner. (3) Motor duplo: você pode alternar entre RFC 9535 e Clássico para comparar resultados ou executar expressões copiadas de ferramentas mais antigas, lado a lado. (4) Idiomas: a interface está disponível em 15 idiomas. Se você só precisa de verificações rápidas de sintaxe legada, o jsonpath.com ainda funciona; para avaliação em conformidade com padrões, privada e sem eval, esta é a escolha mais segura.
O que mostram as vistas Valores, Caminhos e Ambos?
O resultado de uma consulta JSONPath é uma nodelist — um conjunto de nós dentro do seu documento. A vista Valores renderiza esses nós como um array JSON dos valores correspondentes, exatamente o que você consumiria em código. A vista Caminhos renderiza o caminho normalizado de cada correspondência — uma localização canônica, com aspas e colchetes, como $['store']['book'][0]['title'], que identifica exclusivamente onde no documento o valor reside, independentemente de como sua expressão foi escrita. Os caminhos normalizados são um conceito do RFC 9535 e são valiosíssimos para depuração: duas expressões diferentes que selecionam o mesmo nó produzem o mesmo caminho normalizado. A vista Ambos mostra os dois lado a lado para que você possa associar cada valor à sua localização num relance. A vista escolhida persiste entre sessões via localStorage.
Isto funciona offline e quanto a uma Content-Security-Policy?
Sim para ambos. Como cada avaliação roda no seu navegador sem chamadas de rede, a ferramenta continua funcionando depois que a página é carregada, mesmo que você fique offline. E como nenhum dos motores usa eval ou o construtor Function para avaliar expressões de filtro, a ferramenta roda sob uma Content-Security-Policy estrita que proíbe unsafe-eval — a política que muitas organizações preocupadas com segurança aplicam e que quebra bibliotecas JSONPath baseadas em eval. O motor RFC 9535 analisa e interpreta expressões com sua própria gramática, em vez de compilá-las para JavaScript, e o motor Clássico é configurado com eval desativado. Se você precisa avaliar JSONPath dentro de um ambiente interno endurecido, esta ferramenta foi projetada para rodar ali sem exceções de política.

Ferramentas relacionadas

Ver todas as ferramentas →