Consulte JSON com expressões no estilo JSONPath
Extraia valores de um documento de dados com um caminho curto: $.store.books[*].title retorna North e South, um título por livro e na ordem em que aparecem. Um caminho sem resultados dá uma lista vazia, não um erro. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Caminho
- $.store.books[*].title
- Correspondências
- North, South
A sintaxe aceita propriedades diretas, propriedades entre aspas, índices de listas e curingas, mas rejeita deliberadamente filtros, descida recursiva, fatias, uniões e expressões executáveis. Esse contrato restrito produz resultados previsíveis para depuração, testes, inspeção de dados e automações leves.
Monte um caminho a partir do início do documento
Toda expressão começa com <code>$</code>, que representa o documento analisado inteiro. Acrescente um ponto e um nome simples de propriedade, como <code>$.customer.name</code>, para avançar por objetos. Na notação com ponto, o nome deve começar com uma letra ou sublinhado e pode continuar com letras, dígitos ou sublinhados.
Quando uma chave contém espaço, hífen, ponto ou outro caractere fora dessa regra, use uma etapa entre colchetes e aspas, por exemplo <code>$['display-name']</code> ou <code>$["shipping address"]</code>. As etapas aceitam aspas simples ou duplas e permitem escapar a aspa correspondente ou uma barra invertida. Os caminhos são avaliados da esquerda para a direita, e uma propriedade ausente não gera valor para aquele ramo.
A resposta sempre contém uma lista <code>matches</code>, mesmo quando o caminho encontra apenas um escalar. Assim, você pode tratar resultados únicos, curingas e resultados vazios com o mesmo formato de saída.
Selecione itens de listas e expanda curingas
Use um número inteiro não negativo entre colchetes para selecionar uma posição da lista, como <code>$.orders[0].id</code>. Os índices começam em zero; portanto, o primeiro item usa zero, e uma posição além do tamanho da lista não encontra nada. Use <code>[*]</code> para expandir todos os itens e continue o caminho para ler um campo de cada elemento.
Por exemplo, <code>$.store.books[*].title</code> devolve o título de cada objeto de livro que possua essa propriedade. A forma de curinga com ponto <code>.*</code> também é aceita. Curingas podem ser combinados com etapas posteriores de propriedade ou índice, e ramos sem correspondência são descartados sem interferir nos demais.
A ordem final acompanha o documento de origem e a sequência da travessia.
Reconheça a sintaxe excluída de propósito
Esta capacidade implementa uma linguagem pequena no estilo JSONPath, e não todas as variantes existentes. Ela rejeita descida recursiva como <code>$..name</code>, filtros como <code>$[?( @.price < 10)]</code>, fatias, uniões, índices negativos, expressões de script e funções.
Essa decisão é intencional porque tais recursos variam entre bibliotecas, e alguns permitem avaliações inadequadas para um analisador determinístico. Já um caminho válido que não encontra nada não é um erro: ele retorna uma lista <code>matches</code> vazia. Sua automação pode, assim, diferenciar instruções malformadas de consultas válidas sobre dados opcionais ausentes.
Para integrar com segurança, valide os caminhos durante o desenvolvimento, permaneça no subconjunto documentado e determine se um conjunto vazio é aceitável no seu fluxo.
Perguntas frequentes
Quais recursos de JSONPath são aceitos?
O subconjunto inclui o símbolo de raiz, propriedades com ponto, propriedades entre colchetes e aspas, índices não negativos de listas e curingas.
O que acontece quando um caminho não encontra nada?
A solicitação é concluída e devolve uma lista matches vazia. Dados ausentes são diferentes de uma sintaxe de caminho inválida.
Posso usar filtros ou descida recursiva?
Não. Filtros, descida recursiva, fatias, uniões, scripts, funções e índices negativos são rejeitados.
Como leio uma chave com espaço ou hífen?
Escreva o nome entre aspas dentro de colchetes, por exemplo $['display-name'] ou $["shipping address"]. O ponto simples só funciona para nomes que começam com letra ou sublinhado e seguem com letras, dígitos ou sublinhados.
As posições de uma lista começam em 0 ou em 1?
Em 0: $.orders[0].id lê o primeiro pedido. Uma posição além do fim da lista não traz nenhum resultado, mas também não gera erro, e posições negativas não são aceitas.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/dev2/json-path-query \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"json":"{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}","path":"$.store.books[*].title"}'const res = await fetch("https://api.kit.forhosting.com/dev2/json-path-query", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"json": "{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}",
"path": "$.store.books[*].title"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/json-path-query",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"json": "{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}",
"path": "$.store.books[*].title"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/json-path-query", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"json":"{\\"store\\":{\\"books\\":[{\\"title\\":\\"North\\",\\"price\\":12},{\\"title\\":\\"South\\",\\"price\\":18}]}}","path":"$.store.books[*].title"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"json":"{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}","path":"$.store.books[*].title"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/json-path-query", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"json": "{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}",
"path": "$.store.books[*].title"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.json_path_query",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Esta ferramenta de consulta no estilo JSONPath extrai valores de um documento JSON sem exigir que você escreva um script, instale dependências ou configure a linha de comando. Cole um JSON válido, informe um caminho iniciado pelo símbolo de raiz e receba uma lista ordenada de correspondências.
Monte um caminho a partir da raiz do JSON
A expressão de raiz isolada é válida e devolve o valor JSON completo como única correspondência.
Selecione itens de listas e expanda curingas
Em um objeto, o curinga visita os valores na ordem padrão das propriedades JSON; em uma lista, percorre os itens do primeiro ao último. Os valores preservam seus tipos JSON nativos: textos, números, objetos, listas, booleanos e valores nulos são devolvidos sem conversão.
Reconheça a sintaxe excluída de propósito
Expressões incompatíveis retornam um erro <code>invalid_input</code> com uma mensagem que identifica o problema de sintaxe; elas nunca são tratadas como caminhos parcialmente válidos. Um JSON inválido é rejeitado separadamente antes do início da travessia. O preço da API começa em US$ 0,002 por solicitação, e o navegador pode usar a mesma lógica determinística.
Casos de integração
Inspecionar uma resposta de API
Extraia um status, identificador ou conjunto de valores profundamente aninhado durante a depuração de uma resposta.
Criar verificações de teste estáveis
Selecione somente os campos necessários para um teste de regressão, sem comparar um documento inteiro que muda.
Preparar automações leves
Obtenha valores de um JSON de configuração, webhook ou exportação antes de enviá-los à próxima etapa determinística.
Perguntas técnicas
Os valores encontrados são convertidos em texto?
Não. Eles preservam seus tipos JSON, incluindo números, booleanos, valores nulos, objetos e listas.
Quanto custa uma solicitação de API?
O preço da API começa em US$ 0,002 por solicitação. A capacidade também pode ser executada gratuitamente no navegador.