100 % local — vos données ne quittent jamais votre navigateur

Query string en JSON — collez l’URL entière

Transformez une query string d’URL en JSON. Collez l’adresse entière si vous voulez : les paramètres ressortent en objet, lisible ligne par ligne.

Instantané Privé Zéro cookie
Indentation

Entrée Query String

Sortie JSON

Ce que fait cet outil

Une chaîne de requête devient un objet JSON.

?q=json+to+yaml&page=2&tag=a&tag=b
{
  "q": "json to yaml",
  "page": "2",
  "tag": ["a", "b"]
}

+ vaut une espace et %C3%A9 vaut é : le pourcentage-encodage est décodé pour vous, ce qui est souvent la raison de votre venue. Une clé répétée devient un tableau, dans l’ordre où les valeurs sont apparues.

Collez l’adresse entière

https://x.dev/search?q=ada&lang=fr#resultats
{
  "q": "ada",
  "lang": "fr"
}

Coller une URL entière est ce que font la plupart des gens, et l’outil faisait une clé de tout ce qui précédait la requête : https://x.dev/search?q. Le résultat avait l’air de données et n’avait aucun sens. L’adresse avant le premier point d’interrogation est maintenant écartée, et le fragment qui suit aussi — location.search ne le porte pas davantage. C’était un vrai défaut, trouvé en écrivant cette page puis corrigé.

Un point d’interrogation dans une valeur reste où il est : a=1?2 donne {"a": "1?2"}, le point qui ouvre une requête se trouvant avant le premier =, pas après.

Tout est chaîne

?id=007&active=true&count=3
{
  "id": "007",
  "active": "true",
  "count": "3"
}

Une chaîne de requête porte du texte. 007 n’est pas 7, true n’est pas un booléen, et un convertisseur qui devinerait réécrirait discrètement un identifiant. Le typage est de votre côté, là où vous savez que count est un nombre et que id est une référence avec ses zéros.

Ce qu’on ne touche pas

  • Les clés à crochets. a[]=1 et o[b]=2 gardent a[] et o[b] pour noms. PHP et Rails y lisent tableaux et objets ; d’autres piles non, et la chaîne elle-même ne dit pas qui l’a écrite.
  • L’ordre des clés. Elles ressortent comme elles sont entrées, première occurrence d’abord.
  • Les valeurs vides. ?a&b= donne {"a": "", "b": ""} — un paramètre sans valeur est présent, et c’est souvent ce qu’il veut dire.

Confidentiel par conception

Tout s’exécute localement dans votre navigateur en JavaScript. Vos données ne sont jamais envoyées sur un serveur, ce qui rend l’outil sûr pour des contenus sensibles, et il fonctionne hors ligne.

Questions fréquentes

Puis-je coller une URL entière ?
Oui, depuis l’écriture de cette page. Avant, `https://x.dev/p?a=1` vous rendait une clé nommée `https://x.dev/p?a` — l’adresse devant la requête en faisait partie, et le résultat avait l’air de données. Tout ce qui précède le premier point d’interrogation est maintenant écarté, ainsi que le `#fragment` qui suit, exactement comme le fait un navigateur quand il remplit `location.search`.
Pourquoi toutes les valeurs sont-elles des chaînes ?
Parce qu’une chaîne de requête n’a pas de types. `?page=2` et `?page=02` sont deux chaînes différentes, et la seconde veut dire quelque chose dans bien des API — une référence complétée, une version. Lire l’une ou l’autre comme le nombre 2 déciderait à votre place et perdrait la différence. Convertissez de votre côté, là où vous savez ce qu’est le paramètre.
Et `a[]=1&a[]=2` ?
La clé reste `a[]`, telle qu’écrite. Les crochets sont une convention — PHP et Rails y lisent des tableaux, quantité d’autres piles non — et une chaîne de requête ne dit pas laquelle l’a produite. Une clé répétée sans crochets (`a=1&a=2`), elle, devient bien un tableau : c’est la seule chose que la syntaxe elle-même rend non ambiguë.

Convertisseurs associés