String de consulta para JSON
Este conversor decodifica uma string de consulta de URL em um objeto JSON estruturado no seu navegador. Os valores são decodificados de percentagem, com + tratado como espaço, chaves repetidas se tornam arrays, caminhos a[b]=c são aninhados em objetos e valores vazios são decodificados como null. Codificações percentuais malformadas são rejeitadas com a posição nomeada. Nada é enviado.
String de consulta para JSON: explicação
Uma string de consulta parece um ruído — e-comerciais, sinais de igual, escapes percentuais — mas é um registro, e registros merecem estrutura. Este decodificador transforma um em um objeto JSON: chaves da esquerda de cada =, valores decodificados à direita, chaves repetidas coletadas em arrays e caminhos a[b]=c recolhidos em objetos aninhados. É o exato inverso do conversor de JSON para String de Consulta deste site, então o par faz o round-trip.
Duas convenções são importantes e ambas são honradas. O sinal de mais significa um espaço — o hábito application/x-www-form-urlencoded que praticamente todos os formulários, navegadores e servidores ainda falam — enquanto %2B é decodificado para um mais real. E os valores permanecem strings: uma string de consulta não carrega informação de tipo, então page=2 chega como "2", honestamente, e não como um palpite que um CEP puniria mais tarde.
A decodificação acontece inteiramente nesta aba do navegador. A string é dividida e desescapada por código na página; nenhuma solicitação sai da página, e a Content-Security-Policy proíbe conexões de saída de forma explícita. Verifique no painel Rede se quiser — ele fica silencioso, e esse silêncio é a afirmação de privacidade que se sustenta.
Construir a string que você está prestes a analisar é a função da ferramenta irmã, o conversor de JSON para string de consulta, que emite a mesma convenção a[b]=c que este decodificador lê.
Quando a saída em JSON parecer suspeita — um colchete solto, uma aspa faltante — cole-a no Validador de JSON e o caractere exato em falha é apontado.
Como a decodificação realmente funciona
O conversor aceita a string de consulta com ou sem seu ? inicial. Ele divide em &, depois divide cada par no primeiro =, então uma chave pode conter um sinal de igual apenas quando estiver codificada em percentagem — que é exatamente o que o codificador do outro lado deste par faz. Então, por par:
- Decodificar: chave e valor são decodificados de percentagem como UTF-8, com + lido como espaço em valores.
- Aninhar: segmentos de colchete em uma chave se tornam objetos aninhados — user[name] chega a {"user": {"name": ...}}, e a[user][city] aninha dois níveis.
- Coletar: uma chave vista mais de uma vez se torna um array de seus valores na ordem de chegada; uma chave vista exatamente uma vez permanece escalar.
- Vazio: um par com valor vazio ou ausente (token=, ou um token simples sem =) é decodificado como null.
As convenções, entrada por entrada
A tabela abaixo é o contrato do decodificador em miniatura — cada linha é uma regra documentada e não um acidente de implementação:
| Par de entrada | JSON decodificado |
|---|---|
| page=2 | {"page": "2"} — uma string, sem palpite de tipo |
| tag=navy&tag=math | {"tag": ["navy", "math"]} |
| user[name]=Ada | {"user": {"name": "Ada"}} |
| q=a%20b | {"q": "a b"} — %20 decodificado |
| q=a+b | {"q": "a b"} — + é um espaço |
| q=a%2Bb | {"q": "+b"} — o mais escapado sobrevive |
| token= | {"token": null} |
Como a saída se parece
O exemplo abaixo é o par exato que o botão “Carregar exemplo” produz: a mesma string que a página JSON para String de Consulta emite, lida de volta. Note que page permanece "2" e admin permanece "true" — strings, porque a URL não disse nada sobre tipos. Consumidores que querem números convertem deliberadamente na borda do programa, com o esquema em mãos, em vez de confiar em uma inferência que um CEP com zero à esquerda quebraria.
Recusas, não palpites
Escapes malformados são onde ferramentas de decodificação corrompem dados silenciosamente, então este conversor recusa em vez de improvisar. Um sinal de percentagem deve iniciar um escape válido — dois dígitos hexadecimais formando UTF-8 válido — e qualquer outra coisa gera um erro nomeado:
- %ZZ ou %2 — não hexadecimal, então o erro nomeia a chave e a posição do caractere em vez de emitir um percentual literal ou um byte descartado.
- %FF sozinho — hexadecimalmente válido mas não UTF-8 válido, então é rejeitado em vez de ser entregue como mojibake a jusante.
- Um % solto no final da string — um escape truncado, rejeitado com sua posição para que a fonte possa ser corrigida em vez de ser palpitada.
Perguntas frequentes
Decodificar uma string de consulta a envia para algum lugar?
Não. A string é dividida e decodificada por JavaScript na página dentro desta aba do navegador. A página não define um endpoint de API para enviar dados, e sua Content-Security-Policy bloqueia solicitações de saída, então não há nada para onde enviar mesmo se o código tentasse. Abra o DevTools, converta uma string, e o painel Rede fica vazio — a afirmação se verifica a um só olhar.
Por que todos os valores são strings?
Porque uma string de consulta não carrega informação de tipo: page=2 são os dois caracteres 2 do ponto de vista da URL. O decodificador recusa adivinhar, então 2 permanece "2" e true permanece "true" — a mesma política que o lado codificador segue. Converta onde o esquema é conhecido; um CEP 02134 se tornando silenciosamente o número 2134 é o motivo clássico pelo qual a inferência prejudica.
O que + significa ao decodificar?
Um espaço. Essa é a convenção application/x-www-form-urlencoded que navegadores e servidores falam há décadas, e strings de consulta na natureza vêm overwhelmingmente de formulários. Um mais literal deve chegar codificado em percentagem como %2B — o codificador deste site o emite dessa forma, e ambas as grafias decodificam identicamente aqui. A direção inversa é consistente: espaços saem como %20, maises como %2B.
Como chaves repetidas são tratadas?
Uma chave que aparece mais de uma vez se torna um array de seus valores na ordem em que chegaram: tag=navy&tag=math resulta em {"tag": ["navy", "math"]}. Uma chave vista exatamente uma vez permanece escalar. Isso corresponde a como o parser do Rack e do Node qs se comportam, e é o exato inverso do codificador deste site, que repete a chave uma vez por elemento do array.
Como a notação a[b]=c é decodificada?
Segmentos de colchete se tornam objetos aninhados: user[name]=Ada é decodificado como {"user": {"name": "Ada"}}, e a[user][city] aninha dois níveis. Segmentos numéricos permanecem como chaves string — a[0] se torna a chave "0" — porque inventar arrays a partir de índices é um palpite que este decodificador recusa fazer. Ambos os colchetes literais e suas formas escapadas %5B/%5D são aceitas, já que os codificadores diferem nesse ponto.
O que acontece com um par sem valor?
Um valor vazio — token=, ou um token simples sem = — é decodificado como null em vez de uma string vazia. Isso é o inverso deliberado do conversor JSON para String de Consulta deste site, que emite null como um valor vazio, então null sobrevive ao round-trip intacto. Se você precisa distinguir uma string vazia de um valor ausente, uma string de consulta fundamentalmente não pode expressar a diferença.
Quais ferramentas relacionadas devo usar a seguir?
- JSON para string de consultaConversor que roda no seu navegadorAbrir
- Codificar e decodificar URLDistingue + de %20 ao codificar e decodificarAbrir
- Formatar JSONIndenta, ordena chaves e remove comentáriosAbrir
- Validar JSONAponta o erro com linha e coluna e corrige num cliqueAbrir
- Ferramentas de codificaçãoBase64, codificação de URL, hashes e inspeção de tokens.Abrir
- O que é JSONGuia em linguagem simplesAbrir