Pular para o conteudo principal
CuteJSON
↑↓ Navegar Enter Selecionar Esc Fechar

Como usar JSON Pointer, e o que fazer quando falha

Publicado 2 min de leitura Por Akash Kinkar Pandey

JSON Pointer, RFC 6901, e uma pequena especificacao: quatro paginas, uma sintaxe, nenhuma ambiguidade sobre o que um caminho significa. Ele aparece onde algo precisa referenciar um local exato dentro de um documento JSON sem inventar sua propria linguagem de caminhos, mais comumente dentro de JSON Schema e da palavra-chave $ref do JSON Schema.

A sintaxe, brevemente

Um pointer e uma sequencia de tokens separados por /. /user/name significa a chave name dentro do objeto user. /items/0 significa o primeiro elemento do array items. A string vazia, um pointer sem nenhum token, significa o documento inteiro. Dois caracteres precisam de escape dentro de um token: ~1 representa um / literal, e ~0 representa um ~ literal, sempre lidos nessa ordem para que ~01 signifique ~1 em vez de /.

Usar o avaliador de JSON Pointer

Cole um documento, digite um pointer, e pressione Resolver. Dado

{"a/b":{"c~d":42},"list":["x","y"]}

o pointer /a~1b/c~0d resolve atraves de uma chave que literalmente contem uma barra e uma chave que literalmente contem um til, retornando 42. Essa e toda a razao pela qual os escapes existem: sem eles, uma chave contendo o caractere separador seria impossivel de enderecar.

O que uma busca falhada informa

A maioria das ferramentas reporta um pointer falhado como um simples “nao encontrado”, o que nao e suficiente para corrigi-lo em um documento com mais de umas poucas chaves. Este informa ate onde o pointer chegou, o que encontrou la, e quais chaves o objeto realmente tem. Pedir /a~1b/nope contra o mesmo documento retorna:

Nenhuma chave “nope” no objeto aqui, ele tem cd. Resolvido ate /a1b

Isso e suficiente para ver o erro de digitacao imediatamente, em vez de reler todo o documento para adivinhar o que deu errado.

O traco, e por que nao resolve

Dentro do JSON Patch, um traco como o ultimo token de um pointer para um array significa “a posicao apos o ultimo elemento”, usado para anexar. Sozinho, resolver /items/- contra um documento nao nomeia um valor existente, porque ainda nao ha nada la para apontar. O avaliador explica essa distincao em vez de trata-la como um erro de analise generico.

Onde isso difere do JSONPath

JSON Pointer nomeia um local e resolve para exatamente um valor ou falha. JSONPath e uma linguagem de consulta que pode corresponder a varios valores de uma vez, com curingas, filtros e fatiamentos. Use um pointer quando voce ja sabe exatamente qual valor deseja; use JSONPath quando esta procurando valores que correspondem a uma condicao.

Voltar a todos os posts