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.

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.