JSON Toolkit

JSONPath ou JSON Pointer

Resumo: JSON Pointer é um endereço único que você pode armazenar como chave; JSONPath é uma linguagem de consulta. Usar o errado quebra atualizações de configuração ou reinventa um JSONPath quebrado.

Intermediário~4 min de leituraPublicado em 2026-10-30Atualizado em 2026-10-30
Onde o JSONPath termina e o JSON Pointer começa

Resumo da ópera: use JSON Pointer quando precisar ler, escrever ou armazenar o endereço de um nó (por exemplo /server/cors/0), e JSONPath quando precisar selecionar um conjunto de nós por condição; qualquer caminho persistido deve ser um Pointer, nunca uma expressão.

Pergunte se você precisa de um nó ou de um conjunto deles.

Em uma tabela

JSON Pointer JSONPath
Natureza Endereço único Expressão de consulta
Sintaxe /a/b/0 $.a.b[0], $..price
Resultado Exatamente um nó, ou nenhum Zero ou mais nós
Armazenável como chave Sim, a string é a identidade Não, pode corresponder a muitos
Padrão RFC 6901 RFC 9535 (finalizada em 2024)

JSON Pointer

/server/host        -> "127.0.0.1"
/server/cors/0      -> "https://a.com"
/                   -> o documento inteiro

Chaves contendo / ou ~ são escapadas: ~0 para ~, ~1 para /. O valor é a determinismo: o endereço é uma string, então cabe em uma coluna de banco de dados, em uma linha de log ou em uma chave de configuração. O JSON Patch (RFC 6902) endereça toda operação dessa forma.

JSONPath

$.store.book[*].author
$..price
$.store.book[?(@.price < 10)]

Mais próximo do WHERE do SQL. A mesma expressão retorna zero, um ou cem nós, dependendo dos dados.

Dois modos de falha

Usar JSONPath como chave de configuração. Armazene $.server.port e um dia a estrutura vira um array; a expressão agora corresponde a várias portas e a lógica de atualização não tem como escolher.

Usar Pointer para seleção. "Encontre todo nó cujo preço é menor que 10" é impossível com um pointer. Escrever o laço você mesmo significa construir um JSONPath parcial.

Como sistemas reais dividem o trabalho

  • Leituras de configuração, atualizações de campo, patches: Pointer, fixo e auditável
  • Exploração de dados, extração em massa, relatórios: JSONPath, expressividade em primeiro lugar
  • Qualquer coisa persistida: apenas Pointer, nunca uma expressão

Perguntas frequentes

Como devo escolher entre JSON Pointer e JSONPath?

Pergunte se você precisa de um nó ou de um conjunto. Use JSON Pointer para ler ou escrever um nó específico e para armazenar esse endereço como chave, porque o pointer é único, por exemplo /server/cors/0. Use JSONPath para selecionar nós por condição, por exemplo $.store.book[?(@.price < 10)].

Por que uma expressão JSONPath não pode ser usada como chave de configuração?

Porque a expressão pode corresponder a vários nós. Armazene $.server.port e um dia a estrutura vira um array; a expressão então corresponde a múltiplas portas e a lógica de atualização não consegue decidir qual mudar. Qualquer coisa persistida ou auditada precisa de um Pointer.

JSON Pointer consegue filtrar nós por condição?

Não. Um pointer só percorre um caminho fixo e não tem como saber quais nós existem, então selecionar todo nó cujo preço é menor que 10 é impossível. Escrever esse laço você mesmo significa construir um JSONPath parcial.

Leitura adicional