Query String

JSON

¿Qué hace Query String a JSON?

Pegas una query string a la izquierda — con o sin el ? inicial — y la derecha se llena con un objeto JSON. Los valores se decodifican por el camino (así customer=Ava%20Chen se convierte en "customer": "Ava Chen"), y si la misma clave aparece más de una vez se agrupa en un array JSON. Esa última parte es la que la mayoría de las divisiones improvisadas con regex acaban haciendo mal, y por eso existe esta página.

El parseo usa URLSearchParams integrado en el navegador, lo mismo que alimenta request.query en cualquier framework web moderno. URLSearchParams sigue las reglas de application/x-www-form-urlencoded del estándar URL de WHATWG, que es lo que envían los navegadores cuando un formulario hace POST. La salida se serializa luego con JSON.stringify según RFC 8259.

Todo se ejecuta en tu navegador. Si tu entrada es una URL completa, la página es tolerante: extraerá la parte de la query por ti. Si solo te interesan los componentes de la URL (host, path, etc.), usa URL a JSON en su lugar. Si solo quieres mirar los parámetros sin quedarte con el JSON, la página URL Parser encaja mejor. Las reglas de codificación porcentual que entran en juego aquí están definidas por RFC 3986 §2.1.

Cómo convertir una Query String en JSON

Tres pasos. Cada uno se corresponde con un botón de esta página.

1

Pega la Query String

Mete la query string en el panel izquierdo. Está bien incluir el ? inicial; el parser lo elimina. Pulsa Ejemplo para cargar una URL realista de filtros de e-commerce con valores en codificación porcentual, notación con corchetes y una clave tag repetida. Ejemplo:

?customer=Ava%20Chen&status=active&total%5Bgte%5D=49.99&page=2&tag=premium&tag=verified

También puedes pegar una URL completa como <code>https://shop.example.com/orders?...</code> y la página extraerá la parte de la query por ti.

2

Lee el objeto JSON

El panel de la derecha se actualiza mientras escribes. Cada parámetro es una clave, cada valor se decodifica y las claves repetidas se convierten en arrays. Así que el ejemplo de arriba produce "customer": "Ava Chen", "total[gte]": "49.99" y "tag": ["premium", "verified"]. Los números se quedan como strings — las query strings no llevan información de tipos, así que falsearlo solo escondería bugs.

3

Copia, descarga o minifica

Pulsa Copiar para enviar el JSON al portapapeles, Descargar para guardarlo como querystring.json o Minificar para compactarlo en una sola línea. Limpiar reinicia el panel de entrada.

Cuándo lo usarías de verdad

Depurar logs de peticiones

Los logs del servidor vuelcan la línea completa de la petición, query string incluida. Cuando estás cazando por qué la búsqueda de un cliente no devolvió nada, copiar ?customer=Marco%20Rivera&status=cancelled&date_from=2026-04-01&date_to=2026-04-30 del log a esta página es más rápido que decodificar mentalmente cada valor. El JSON deja claros los filtros reales.

Generar fixtures de test a partir de tráfico real

Estás escribiendo tests contra un endpoint que recibe 12 parámetros de query. Coge una URL real de producción, pega la query string aquí y usa el JSON como objeto de parámetros en tu test. Nombres reales, formas reales, bugs reales — mejor que inventarte customer: "ORD-1001" de la cabeza.

Migrar entre convenciones de query string

Cada stack codifica los arrays a su manera: ?tag=red&tag=blue, ?tag[]=red&tag[]=blue, ?tag=red,blue. Convertir primero a JSON te da una forma intermedia neutra. A partir de ahí, transformar a la convención de destino es un script de 5 líneas en lugar de arqueología con regex.

OAuth, webhooks y callbacks de analítica

Los callbacks OAuth vuelven como ?code=abc&state=xyz. Las URLs de webhooks de servicios como Stripe o GitHub meten metadatos en la query string. Las redirecciones de analítica apilan una docena de parámetros UTM y de tracking encima. Pegar solo la parte de la query aquí te lleva directo al objeto de parámetros sin tener que despegar primero el host.

Preguntas frecuentes

¿Hace falta incluir el signo de interrogación inicial?

No — pega con o sin él. El parser elimina el ? inicial si lo encuentra. Incluso puedes pegar una URL completa (https://api.shop.example.com/orders?customer=Ava%20Chen) y la página extraerá la parte de la query por ti.

¿Cómo se manejan las claves repetidas?

Se agrupan en un array JSON. Así que ?tag=premium&tag=verified se convierte en "tag": ["premium", "verified"]. Esto coincide con el comportamiento de URLSearchParams.getAll() y con cómo Express, FastAPI, ASP.NET y Spring parsean las query strings.

¿Y las claves sin valor como ?debug o ?dry-run?

Se convierten en strings vacíos: "debug": "". URLSearchParams trata una clave sin = igual que key= según el estándar URL de WHATWG. Si necesitas un booleano de verdad, postprocesa el JSON con algo como obj.debug = "debug" in obj.

¿Y la notación con corchetes como ?items[]=1&items[]=2?

Los corchetes se conservan como parte de la clave — verás "items[]": ["1", "2"] en la salida. Eso es honesto con los bytes que viajaron por la red. Si tu framework (PHP, Rails, qs.js) necesita los corchetes pelados o expandidos en objetos anidados, hazlo como paso de postprocesado.

¿Por qué todos los valores son strings, aunque parezcan números o booleanos?

Porque las query strings no llevan información de tipos. ?count=5 y ?count=true son ambos solo texto. Coercer automáticamente a números o booleanos hace que un ejemplo del happy path quede mono pero genera bugs silenciosos en el momento que el nombre de un cliente sea "1" o alguien escriba ?id=007. La salida se queda como strings; convierte en tu código donde conoces el esquema.

¿Cómo maneja Unicode y emoji?

Limpio. URLSearchParams decodifica los bytes con porcentaje y luego los interpreta como UTF-8 — así ?name=%E4%B8%AD%E6%96%87 se convierte en "name": "中文" y emojis como ?reaction=%F0%9F%94%A5 se convierten en "reaction": "🔥". JSON.stringify luego escapa lo que haya que escapar según RFC 8259 §7.

Otras herramientas de URL y JSON

Decodificar una query string es una operación. Esto es lo que se combina bien con ella: