Pular para o conteúdo

Testador e gerador de JSON Pointer

Cole o documento e um ponteiro como /items/0/name. Use o gerador por segmentos quando os nomes tiverem barras ou tis.

Funciona localmente no seu navegador
1Document2Pointer3Resolved value

DocumentRFC 6901

Como resolver um JSON Pointer ou criá-lo a partir de segmentos

A ferramenta resolve um JSON Pointer RFC 6901 contra um documento JSON e mostra o valor selecionado, os segmentos decodificados do caminho e o tipo desse valor. Um ponteiro é a string vazia, que seleciona o documento inteiro, ou uma sequência de segmentos separados por barras: /users/0/name entra no array users, pega o primeiro elemento e lê name ali.

O gerador por segmentos funciona na direção contrária. Digite um segmento por linha e a ferramenta os une em um ponteiro escapado, de modo que nomes com barra ou til saem como ~1 e ~0 em vez de quebrar o caminho. Tudo roda dentro da página, e Copiar leva o valor resolvido para a área de transferência.

  1. Cole o documento JSON no painel Documento ou clique em Carregar exemplo para começar com um array users que já tem uma chave com barra no nome.
  2. Digite o ponteiro no campo Pointer. Ele deve estar vazio ou começar com barra; a forma #/users/0/name é aceita como fragmento de URI e é percent-decoded antes da leitura dos segmentos.
  3. Clique em Resolver pointer. O painel Valor resolvido mostra o valor escolhido — strings como estão, objetos e arrays formatados — e Segmentos de caminho decodificados lista cada segmento com sua posição, ou (document root) quando o ponteiro é vazio.
  4. Leia as três métricas acima da saída: Segmentos, Tipo de valor e se o ponteiro foi resolvido. Um ponteiro que sai do documento é informado como não encontrado, em vez de devolver um valor próximo.
  5. Para criar um ponteiro, digite um segmento por linha em Segmentos de caminho e clique em Criar a partir de segmentos; linhas vazias são descartadas e o ponteiro escapado volta para o campo Pointer. Limpar reinicia os dois painéis, os segmentos, as métricas e a mensagem de estado.

O que cada painel mostra e como as regras do ponteiro são aplicadas

Segmentos, escapes e fragmentos de URI

O ponteiro é dividido por barras, e a barra inicial só marca o começo, então //empty aponta para a propriedade cujo nome é a string vazia e /a~1b aponta para a chave a/b. Os dois escapes são ~1 para a barra e ~0 para o til; um til seguido de qualquer outra coisa, inclusive do fim do ponteiro, é recusado com erro em vez de ser lido como literal.

O campo também aceita fragmento de URI: #/users/0/name e a forma percent-encoded #%2Fusers%2F1%2Fname chegam aos mesmos segmentos, e #/a%20b lê a chave a b. Espaços em volta do ponteiro são removidos antes da leitura, então um espaço no fim depois de /a é ignorado.

Arrays, tipos de valor e resultados não encontrados

Posições de array seguem a RFC 6901 à risca: um segmento só conta como índice quando é 0 ou uma sequência de dígitos sem zero à esquerda. /arr/1 seleciona o segundo elemento, enquanto /arr/01, /arr/- e um índice além do fim não são encontrados; o traço que marca o fim de um array no JSON Patch não é um valor legível aqui.

Objetos são comparados pelo nome exato da propriedade própria, então chaves com espaços, letras Unicode ou nomes como __proto__ resolvem como qualquer outra; não há curinga nem busca. O valor aparece conforme o tipo: strings cruas, números e booleanos como JSON, null como null, objetos e arrays formatados, com Tipo de valor e Resolvido nas métricas.

Criar ponteiros, privacidade e limites

Criar a partir de segmentos escapa cada linha separadamente, une os segmentos com barras e troca ~ por ~0 antes de / por ~1, a ordem que a RFC 6901 exige. Uma lista vazia gera um ponteiro vazio que seleciona o documento inteiro; se o painel do documento estiver vazio, a ação só escreve o ponteiro e informa que ele veio dos segmentos, sem inventar um valor.

As duas direções rodam no navegador: resolver, criar, o exemplo e Copiar não fazem nenhuma requisição de rede, então a ferramenta funciona offline e com dados que não podem sair da máquina. Copiar fica inativo enquanto não há valor na tela: depois de um JSON inválido, de um escape errado ou de um ponteiro que não resolve, o valor anterior é apagado e não pode ser copiado por engano.

Ferramentas recentes: