¿Cómo serializar un objeto en una lista de parámetros de consulta de URL?
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¶m2=somethingelse¶m3=another¶m4=yetanother';
...?
Aceptado
Una línea sin dependencias:
new URLSearchParams(obj).toString();
// OUT: param1=something¶m2=somethingelse¶m3=another¶m4=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]: null
los valores se interpretarán como la cadena 'null'
.
[Editar 9 de marzo de 2022]: compatibilidad del navegador
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/
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.