Comment encoder du JSON en Base64
- Collez le JSON dans Entrée · texte, ou appuyez sur Exemple pour charger un objet d’exemple.
- Copiez le Base64 depuis Sortie · Base64. Les chiffres de taille montrent de combien il s’est allongé.
- Pour les URL, les cookies ou les valeurs de type jeton, cochez URL-safe (- _) et Sans remplissage (=).
- Télécharger enregistre le résultat dans
base64.txt.
L’exemple de cette page, {"id":42,"name":"base64hub","tags":["json","encode"],"active":true}, fait 67 octets et s’encode en eyJpZCI6NDIsIm5hbWUiOiJiYXNlNjRodWIiLCJ0YWdzIjpbImpzb24iLCJlbmNvZGUiXSwiYWN0aXZlIjp0cnVlfQ==. Pour vérifier un résultat, appuyez sur Inverser, ou utilisez Base64 en JSON, qui formate aussi le JSON.
Les espaces et la mise en forme changent le Base64
Base64 encode les caractères exacts du texte JSON : deux documents qui veulent dire la même chose produisent donc un Base64 différent dès qu’une seule espace diffère :
| Texte JSON | Base64 |
|---|---|
{"a":1} | eyJhIjoxfQ== |
{"a": 1} | eyJhIjogMX0= |
{ "a": 1 } | eyAiYSI6IDEgfQ== |
{"a":1} formaté sur trois lignes | ewogICJhIjogMQp9 |
Si le Base64 est comparé, mis en cache ou signé, produisez le JSON avec un seul sérialiseur aux réglages fixes, et encodez cette chaîne exacte. L’ordre des clés est un autre piège : la plupart des sérialiseurs conservent l’ordre d’insertion, si bien que {"a":1,"b":2} et {"b":2,"a":1} s’encodent différemment.
Python et JavaScript divergent par défaut
L’objet {"name": "Zoë", "n": 1} sérialisé avec les réglages par défaut de chaque langage :
| Sérialiseur | Texte JSON | Base64 |
|---|---|---|
JavaScript JSON.stringify | {"name":"Zoë","n":1} | eyJuYW1lIjoiWm/DqyIsIm4iOjF9 |
Python json.dumps | {"name": "Zoë", "n": 1} | eyJuYW1lIjogIlpvXHUwMGViIiwgIm4iOiAxfQ== |
Python avec separators=(",", ":"), ensure_ascii=False | {"name":"Zoë","n":1} | eyJuYW1lIjoiWm/DqyIsIm4iOjF9 |
Avec URL-safe et sans remplissage cochés, la version JavaScript devient eyJuYW1lIjoiWm_DqyIsIm4iOjF9.
Où l’on utilise du JSON en Base64
- Les en-têtes HTTP. Les en-têtes personnalisés qui transportent du contexte, comme des données de traçage ou des métadonnées utilisateur, contiennent souvent du JSON en Base64, car les guillemets et les caractères non ASCII du JSON brut ne sont pas sûrs dans les valeurs d’en-tête. Beaucoup de serveurs rejettent les lignes d’en-tête de plus de 8 Ko environ : gardez ces payloads petits.
- Les paramètres d’URL. Les valeurs
stated’OAuth, les cibles de redirection et les liens de partage transportent parfois un petit objet JSON en Base64URL. - Les variables d’environnement et les secrets. Une configuration JSON entière tient dans une seule variable sans échappement, par exemple une clé de compte de service dans un système de CI.
- Les formats de jetons. L’en-tête et le payload d’un JWT sont du JSON encodé en Base64URL sans remplissage. Pour construire un jeton signé, utilisez l’encodeur JWT ; cette page ne fait qu’encoder.
Base64 ajoute un tiers à la taille, et les guillemets et les clés du JSON pèsent souvent plus lourd que les valeurs. Le surcoût de taille de Base64 montre quand compresser d’abord est rentable.
JSON en Base64 dans le code
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)
Sans l’étape TextEncoder, btoa(JSON.stringify(obj)) encode ë en un seul octet Latin-1 (eyJuYW1lIjoiWm/rIiwibiI6MX0=), que les décodeurs UTF-8 ne savent pas lire, et lève une exception pour tout ce qui dépasse le Latin-1, comme un 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'
D’autres options sur les pages JavaScript, Node.js et Python.
FAQ
Comment convertir du JSON en Base64 ?
Sérialisez le JSON en chaîne, encodez la chaîne en UTF-8 et encodez les octets en Base64. Collez le JSON ci-dessus pour obtenir le résultat, ou utilisez btoa avec une étape UTF-8 en JavaScript et base64.b64encode(json.dumps(obj).encode()) en Python.
Pourquoi le même objet donne-t-il un Base64 différent en Python et en JavaScript ?
Leurs sérialiseurs diffèrent. json.dumps en Python ajoute des espaces après : et , et échappe le non-ASCII sous la forme \u00eb, alors que JSON.stringify ne fait ni l’un ni l’autre. Utilisez separators=(",", ":") et ensure_ascii=False pour obtenir le même résultat.
Cet outil valide-t-il ou minifie-t-il mon JSON ?
Non, il encode le texte exactement tel que vous l’avez saisi, espaces compris. Minifiez d’abord le JSON si la sortie doit être courte ou identique octet pour octet à celle d’un autre système.
Faut-il utiliser du Base64 URL-safe pour du JSON dans une URL ?
Oui. Le Base64 standard peut contenir +, / et =, qui ont un sens dans les URL. Cochez URL-safe et Sans remplissage, le format qu’utilisent les JWT.