ToolDeck

Testador JSONPath

Teste expressões JSONPath em dados JSON e veja os resultados correspondentes

Experimente um exemplo

Entrada JSON

Resultados

Roda localmente · Seguro para colar segredos
Os resultados aparecerão aqui…

O Que É JSONPath?

JSONPath é uma linguagem de consulta para extrair valores de documentos JSON. Proposta originalmente por Stefan Goessner em 2007 como um análogo ao XPath para XML, o JSONPath permite escrever expressões como $.store.book[*].author para selecionar todos os campos de autor dentro de um array de livros sem precisar de loops ou código de travessia manual. A linguagem foi padronizada em fevereiro de 2024 como RFC 9535, publicada pelo IETF.

Uma expressão JSONPath sempre começa com $ representando a raiz do documento. A partir daí, você encadeia seletores: notação de ponto para chaves de objetos, notação de colchetes para índices de arrays, curingas para todos os filhos e o operador de descida recursiva (..) para pesquisar em todos os níveis de aninhamento. Expressões de filtro como [?(@.price < 10)] permitem selecionar elementos com base em condições avaliadas sobre seus valores.

JSONPath é usado em ferramentas de teste de API como o Postman, plataformas de observabilidade como Datadog e Splunk, mecanismos de fluxo de trabalho como o Apache NiFi, e bibliotecas de programação em JavaScript, Python, Go, Java e C#. Testar suas expressões em dados reais antes de incorporá-las em código ou arquivos de configuração evita falhas silenciosas quando a estrutura JSON não corresponde às suas suposições.

Por Que Usar Este Testador JSONPath?

Escrever expressões JSONPath manualmente é suscetível a erros. Um ponto faltando, tipo de colchete errado ou sintaxe de filtro incorreta pode retornar resultados vazios sem nenhuma mensagem de erro. Esta ferramenta fornece feedback visual imediato sobre o que sua expressão corresponde.

Resultados Instantâneos
Cole o JSON, digite uma expressão e veja os valores correspondentes serem atualizados em tempo real. Não é necessário executar um script ou recarregar a página para verificar sua consulta.
🔒
Privacidade em Primeiro Lugar
Toda a avaliação é executada no seu navegador. Seus dados JSON nunca saem da sua máquina, portanto você pode testar com segurança expressões em respostas de API de produção ou arquivos de configuração que contenham credenciais.
📋
Copie os Resultados Diretamente
Copie o resultado correspondente como JSON com um clique. Cole em asserções de testes, documentação ou exemplos de respostas de API sem precisar reformatar.
🛠️
Sem Configuração Necessária
Nenhum pacote npm para instalar, nenhum virtualenv Python para criar. Abra a página, cole seus dados e comece a consultar. Funciona em qualquer dispositivo com um navegador.

Casos de Uso do JSONPath

Desenvolvimento Frontend
Extraia os valores aninhados exatos que você precisa de respostas de API antes de conectá-los ao estado do React ou às propriedades computadas do Vue. Teste suas expressões de caminho no payload real da API primeiro.
Testes de API Backend
O Postman e o REST-assured usam JSONPath para verificar os corpos de resposta. Construa e verifique suas expressões de asserção aqui antes de copiá-las para scripts de teste, reduzindo ciclos de depuração.
Configuração de DevOps
Definições de recursos personalizados do Kubernetes, AWS Step Functions e fontes de dados do Terraform aceitam expressões JSONPath para extrair valores de saídas JSON. Valide seu caminho antes de implantar.
Automação de Testes de QA
Escreva asserções baseadas em JSONPath para testes de contrato e testes de integração. Verifique se suas expressões correspondem corretamente aos valores esperados quando a estrutura JSON possui campos opcionais ou anuláveis.
Extração em Pipelines de Dados
Apache NiFi, Logstash e scripts ETL personalizados usam JSONPath para extrair campos de dados de log semiestruturados e fluxos de eventos. Teste expressões em payloads de amostra antes de implantar o pipeline.
Aprendizado e Experimentação
Estudantes e desenvolvedores iniciantes em JSONPath podem experimentar diferentes expressões em JSON de amostra para entender como curingas, descida recursiva e filtros funcionam sem precisar de um ambiente local.

Referência de Sintaxe JSONPath

O RFC 9535 define a sintaxe padrão do JSONPath. A tabela abaixo cobre os operadores que você usará na maioria das consultas. Todas as expressões começam com $ (o nó raiz) e encadeiam um ou mais seletores para navegar pela estrutura do documento.

OperadorDescriçãoExemplo
$Root element$.store
.keyChild property$.store.book
[n]Array index (zero-based)$.store.book[0]
[*]All elements in array/object$.store.book[*]
..Recursive descent$..author
[start:end]Array slice$.store.book[0:2]
[?()]Filter expression$.store.book[?(@.price<10)]
@Current node (inside filter)$.store.book[?(@.isbn)]

JSONPath vs jq vs XPath

JSONPath, jq e XPath resolvem o mesmo problema (consultar dados estruturados) para diferentes formatos e casos de uso. JSONPath é voltado para JSON e está disponível como biblioteca na maioria das linguagens. jq é uma ferramenta CLI independente com sua própria linguagem de filtros Turing-completa. XPath opera sobre XML e faz parte do conjunto de especificações da W3C.

RecursoJSONPathjqXPath
Formato de dadosJSONJSONXML
Acessar primeiro elemento$.store.book[0].store.book[0]/store/book[1]
Pesquisa recursiva$..price.. | .price?//price
Expressão de filtro[?(@.price<10)]select(.price < 10)[price<10]
EspecificaçãoRFC 9535stedolan.github.ioW3C XPath 3.1

Exemplos de Código

Como avaliar expressões JSONPath em linguagens e ferramentas populares. Cada exemplo usa a mesma estrutura JSON de livraria para comparação.

JavaScript (jsonpath-plus)
import { JSONPath } from 'jsonpath-plus';

const data = {
  store: {
    book: [
      { title: 'Moby Dick', price: 8.99 },
      { title: 'The Great Gatsby', price: 12.99 }
    ]
  }
};

// Get all book titles
JSONPath({ path: '$.store.book[*].title', json: data });
// → ['Moby Dick', 'The Great Gatsby']

// Recursive descent — find every price in the document
JSONPath({ path: '$..price', json: data });
// → [8.99, 12.99]

// Filter — books under $10
JSONPath({ path: '$.store.book[?(@.price < 10)]', json: data });
// → [{ title: 'Moby Dick', price: 8.99 }]
Python (jsonpath-ng)
from jsonpath_ng.ext import parse
import json

data = {
    "store": {
        "book": [
            {"title": "Moby Dick", "price": 8.99},
            {"title": "The Great Gatsby", "price": 12.99}
        ]
    }
}

# Get all book titles
expr = parse("$.store.book[*].title")
titles = [match.value for match in expr.find(data)]
# → ['Moby Dick', 'The Great Gatsby']

# Recursive descent — all prices
expr = parse("$..price")
prices = [match.value for match in expr.find(data)]
# → [8.99, 12.99]

# Filter — books under $10
expr = parse("$.store.book[?price < 10]")
cheap = [match.value for match in expr.find(data)]
# → [{"title": "Moby Dick", "price": 8.99}]
Go (ohler55/ojg)
package main

import (
    "fmt"
    "github.com/ohler55/ojg/jp"
    "github.com/ohler55/ojg/oj"
)

func main() {
    src := `{
        "store": {
            "book": [
                {"title": "Moby Dick", "price": 8.99},
                {"title": "The Great Gatsby", "price": 12.99}
            ]
        }
    }`

    obj, _ := oj.ParseString(src)

    // Get all book titles
    expr, _ := jp.ParseString("$.store.book[*].title")
    results := expr.Get(obj)
    fmt.Println(results)
    // → [Moby Dick The Great Gatsby]

    // Recursive descent — all prices
    expr2, _ := jp.ParseString("$..price")
    fmt.Println(expr2.Get(obj))
    // → [8.99 12.99]
}
CLI (jq alternative syntax)
# jq uses its own syntax, not JSONPath, but solves the same problem.
# Mapping common JSONPath patterns to jq:

# $.store.book[*].title → get all titles
echo '{"store":{"book":[{"title":"Moby Dick"},{"title":"Gatsby"}]}}' | \
  jq '.store.book[].title'
# → "Moby Dick"
# → "Gatsby"

# $..price → recursive descent for "price" keys
echo '{"a":{"price":1},"b":{"price":2}}' | \
  jq '.. | .price? // empty'
# → 1
# → 2

# Filter: books where price < 10
echo '{"store":{"book":[{"title":"A","price":8},{"title":"B","price":12}]}}' | \
  jq '.store.book[] | select(.price < 10)'
# → {"title":"A","price":8}

Perguntas Frequentes

Qual é a diferença entre JSONPath e jq?
JSONPath é uma linguagem de consulta projetada para ser incorporada em aplicações como biblioteca. Ela retorna valores correspondentes de um documento JSON usando expressões de caminho. jq é uma ferramenta de linha de comando independente com uma linguagem de programação completa para transformar JSON, incluindo condicionais, funções e interpolação de strings. Use JSONPath quando precisar de uma consulta incorporada em código ou em uma ferramenta como o Postman. Use jq para transformação de dados ad-hoc na linha de comando.
JSONPath é um padrão oficial?
Sim. O IETF publicou o RFC 9535 ("JSONPath: Query Expressions for JSON") em fevereiro de 2024. Antes disso, JSONPath existia apenas como uma especificação informal de Stefan Goessner de 2007, o que levou a inconsistências entre implementações. O RFC 9535 define a sintaxe, a semântica e um formato de normalização para interoperabilidade.
Como funciona a descida recursiva (..) no JSONPath?
O operador de descida recursiva (..) pesquisa todos os níveis do documento JSON pela chave que o segue. Por exemplo, $..price retorna todos os valores associados à chave "price" independentemente do nível de aninhamento. É equivalente a um percurso em profundidade que coleta os nós correspondentes. Esteja ciente de que, em documentos grandes, a descida recursiva pode retornar muitos resultados e pode ser mais lenta do que um caminho direto.
O JSONPath pode modificar dados JSON?
Não. JSONPath é uma linguagem de consulta somente leitura. Ele seleciona e retorna valores, mas não pode inserir, atualizar ou excluir nós. Para modificar JSON com base em uma expressão JSONPath, você precisa usar as funções de manipulação JSON da sua linguagem de programação após a consulta. Algumas bibliotecas como jsonpath-ng em Python fornecem um método set() em objetos de correspondência, mas isso é uma extensão da biblioteca, não faz parte da especificação JSONPath.
O que o símbolo @ significa em expressões de filtro JSONPath?
O símbolo @ refere-se ao nó atual sendo avaliado em uma expressão de filtro. Em $.store.book[?(@.price < 10)], o filtro itera sobre cada elemento do array book, e @ representa cada objeto de livro por vez. @.price acessa o campo price do livro atual. Sem @, o filtro não saberia as propriedades de qual nó verificar.
Como lidar com chaves que contêm caracteres especiais ou espaços no JSONPath?
Use notação de colchetes com aspas: $['store']['book title']. A notação de colchetes funciona para qualquer chave, incluindo aquelas com pontos, espaços ou caracteres Unicode. A notação de ponto ($.store.key) funciona apenas para chaves que são identificadores válidos (letras, dígitos, sublinhados). O RFC 9535 exige que as implementações suportem notação de colchetes com aspas simples e duplas.
Por que minha expressão JSONPath retorna resultados vazios?
As causas mais comuns são: erro de digitação em um nome de chave (JSONPath diferencia maiúsculas de minúsculas), uso de notação de ponto para uma chave que contém caracteres especiais, ausência do símbolo raiz $ no início, ou assumir que um valor é um array quando é um único objeto. Cole seu JSON em um testador e tente sub-expressões mais simples primeiro (como $.store) para verificar se cada segmento do seu caminho resolve corretamente antes de adicionar mais seletores.