¿Cómo serializar un objeto en una lista de parámetros de consulta de URL?

Resuelto bobsoap asked hace 13 años • 27 respuestas

Sin conocer las claves de JavaScript Object, ¿cómo puedo convertir algo como...

var obj = {
   param1: 'something',
   param2: 'somethingelse',
   param3: 'another'
}

obj[param4] = 'yetanother';

...en...

var str = 'param1=something&param2=somethingelse&param3=another&param4=yetanother';

...?

bobsoap avatar Jul 04 '11 07:07 bobsoap
Aceptado

Una línea sin dependencias:

new URLSearchParams(obj).toString();
// OUT: param1=something&param2=somethingelse&param3=another&param4=yetanother

Úselo con la URL incorporada de esta manera:

let obj = { param1: 'something', param2: 'somethingelse', param3: 'another' }
obj['param4'] = 'yetanother';
const url = new URL(`your_url.com`);
url.search = new URLSearchParams(obj);
const response = await fetch(url);

[Edición 4 de abril de 2020]: nulllos valores se interpretarán como la cadena 'null'.

[Editar 9 de marzo de 2022]: compatibilidad del navegador

jfunk avatar Aug 16 '2019 18:08 jfunk

Si usa jQuery, esto es lo que usa para parametrizar las opciones de una solicitud GET XHR:

$.param( obj )

http://api.jquery.com/jQuery.param/

Duke avatar Mar 08 '2013 07:03 Duke

Uno elegante: (suponiendo que esté ejecutando un navegador o nodo moderno)

var str = Object.keys(obj).map(function(key) {
  return key + '=' + obj[key];
}).join('&');

Y el equivalente ES2017: (gracias a Lukas)

let str = Object.entries(obj).map(([key, val]) => `${key}=${val}`).join('&');

Nota: Probablemente desee utilizarlo encodeURIComponent()si las claves/valores no están codificados en URL.

benweet avatar May 13 '2014 19:05 benweet