Como codificar JSON em Base64
- Cole o JSON em Entrada · texto, ou clique em Exemplo para carregar um objeto de exemplo.
- Copie o Base64 de Saída · Base64. Os números de tamanho mostram quanto ele cresceu.
- Para URLs, cookies ou valores parecidos com tokens, marque URL-safe (- _) e Sem preenchimento (=).
- Baixar salva o resultado como
base64.txt.
O exemplo desta página, {"id":42,"name":"base64hub","tags":["json","encode"],"active":true}, tem 67 bytes e vira eyJpZCI6NDIsIm5hbWUiOiJiYXNlNjRodWIiLCJ0YWdzIjpbImpzb24iLCJlbmNvZGUiXSwiYWN0aXZlIjp0cnVlfQ==. Para conferir um resultado, clique em Inverter, ou use o Base64 para JSON, que também formata o JSON.
Espaços e formatação mudam o Base64
O Base64 codifica exatamente os caracteres do texto JSON, então dois documentos com o mesmo significado geram Base64 diferente se um único espaço for diferente:
| Texto JSON | Base64 |
|---|---|
{"a":1} | eyJhIjoxfQ== |
{"a": 1} | eyJhIjogMX0= |
{ "a": 1 } | eyAiYSI6IDEgfQ== |
{"a":1} formatado em três linhas | ewogICJhIjogMQp9 |
Quando o Base64 é comparado, guardado em cache ou assinado, gere o JSON com um único serializador e configurações fixas, e codifique exatamente essa string. A ordem das chaves é outra armadilha: a maioria dos serializadores mantém a ordem de inserção, então {"a":1,"b":2} e {"b":2,"a":1} geram codificações diferentes.
Python e JavaScript discordam por padrão
O objeto {"name": "Zoë", "n": 1} serializado com os padrões de cada linguagem:
| Serializador | Texto JSON | Base64 |
|---|---|---|
JavaScript JSON.stringify | {"name":"Zoë","n":1} | eyJuYW1lIjoiWm/DqyIsIm4iOjF9 |
Python json.dumps | {"name": "Zoë", "n": 1} | eyJuYW1lIjogIlpvXHUwMGViIiwgIm4iOiAxfQ== |
Python com separators=(",", ":"), ensure_ascii=False | {"name":"Zoë","n":1} | eyJuYW1lIjoiWm/DqyIsIm4iOjF9 |
Com URL-safe e sem preenchimento marcados, a versão do JavaScript vira eyJuYW1lIjoiWm_DqyIsIm4iOjF9.
Onde o JSON em Base64 é usado
- Headers HTTP. Headers personalizados que levam contexto, como tracing ou metadados do usuário, muitas vezes guardam JSON em Base64, já que as aspas do JSON cru e caracteres não ASCII não são seguros em valores de header. Muitos servidores rejeitam linhas de header com mais de uns 8 KB, então mantenha esses payloads pequenos.
- Parâmetros de URL. Valores
statedo OAuth, destinos de redirecionamento e links de compartilhamento às vezes levam um pequeno objeto JSON em Base64URL. - Variáveis de ambiente e segredos. Uma configuração JSON inteira cabe numa variável sem escape, por exemplo a chave de uma service account num sistema de CI.
- Formatos de token. O header e o payload do JWT são JSON codificado em Base64URL sem preenchimento. Para gerar um token assinado, use o codificador de JWT; esta página só codifica.
O Base64 acrescenta um terço ao tamanho, e as próprias aspas e chaves do JSON muitas vezes ocupam mais que os valores. O custo de tamanho do Base64 mostra quando vale a pena compactar antes.
JSON para Base64 no código
const obj = { name: "Zoë", n: 1 };
const bytes = new TextEncoder().encode(JSON.stringify(obj));
btoa(String.fromCharCode(...bytes)); // "eyJuYW1lIjoiWm/DqyIsIm4iOjF9"
Buffer.from(JSON.stringify(obj)).toString("base64url"); // "eyJuYW1lIjoiWm_DqyIsIm4iOjF9" (Node.js)
Sem a etapa do TextEncoder, btoa(JSON.stringify(obj)) codifica o ë como um único byte Latin-1 (eyJuYW1lIjoiWm/rIiwibiI6MX0=), que decodificadores UTF-8 não conseguem ler, e lança erro com qualquer coisa além do Latin-1, como um emoji.
import base64, json
obj = {"name": "Zoë", "n": 1}
text = json.dumps(obj, separators=(",", ":"), ensure_ascii=False)
base64.b64encode(text.encode("utf-8")).decode() # 'eyJuYW1lIjoiWm/DqyIsIm4iOjF9'
Mais opções nas páginas de JavaScript, Node.js e Python.
Perguntas frequentes
Como converter JSON em Base64?
Serialize o JSON numa string, codifique a string como UTF-8 e codifique os bytes em Base64. Cole o JSON acima para ver o resultado, ou use btoa com uma etapa de UTF-8 em JavaScript e base64.b64encode(json.dumps(obj).encode()) em Python.
Por que o mesmo objeto gera Base64 diferente em Python e JavaScript?
Os serializadores são diferentes. O json.dumps do Python adiciona espaços depois de : e , e escapa caracteres não ASCII como \u00eb, enquanto o JSON.stringify não faz nenhuma das duas coisas. Use separators=(",", ":") e ensure_ascii=False para igualar.
Esta ferramenta valida ou minifica meu JSON?
Não, ela codifica o texto exatamente como você digitou, espaços incluídos. Minifique o JSON antes se a saída precisar ser curta ou idêntica byte a byte à de outro sistema.
Devo usar Base64 URL-safe para JSON numa URL?
Deve. O Base64 padrão pode conter +, / e =, que têm significado em URLs. Marque URL-safe e Sem preenchimento, o mesmo formato que o JWT usa.