¿Conoces una forma rápida y sencilla de codificar un objeto Javascript en un objeto string
que pueda pasar a través de una GET
solicitud?
No jQuery
, no hay otros marcos, simplemente Javascript :)
javascript
query-string
urlencode
napolux
fuente
fuente
URLSearchParams
ahora ...Respuestas:
¿Me gusta esto?
Editar: este también convierte objetos recursivos (usando la notación php "array" para la cadena de consulta)
fuente
jQuery tiene una función para esto,
jQuery.param()
si ya lo está usando, puede usarlo: http://api.jquery.com/jquery.param/ejemplo:
str
ahora contienewidth=1680&height=1050
fuente
var a = []; a[5] = 'foo'; jQuery.param({ parameters: a });
Resultados en"parameters[]=¶meters[]=¶meters[]=¶meters[]=¶meters[]=¶meters[]=foo"
. Lo cual, aunque correcto, puede no ser lo que esperas.Simplemente use
URLSearchParams
Esto funciona en todos los navegadores actualesfuente
let j = { m: 5, n: { k: 1 } }; new URLSearchParams(j).toString(); // result "m=5&n=%5Bobject+Object%5D"
stringify
los objetos anidados antes de que puedasURLSearchParams
Editar: Me gusta esta frase, pero apuesto a que sería una respuesta más popular si coincidía semánticamente con la respuesta aceptada:
fuente
Object.keys(obj).map(k => k + '=' + encodeURIComponent(obj[k])).join('&')
Object.keys
solo está disponible en IE> = 9Object.keys(obj).map(k => `${k}=${encodeURIComponent(obj[k])}`).join('&')
Object.entries(obj).map(e => e.map(ee => encodeURIComponent(ee)).join('=')).join('&');
Aquí hay una línea en ES6:
fuente
export?actions[]=finance,create,edit
cuando debería tenerexport?actions[]=finance&actions[]=create&actions[]=edit
como es el horrible estándar.actions[]
es notación PHP; Django usa múltiples en suaction
lugar (sin[]
sufijo); algunos otros ORM / CMS requieren listas separadas por comas, etc. Entonces, "si no se trata de cadenas simples, primero asegúrese de saber lo que su servidor quiere".Con Node.js v6.6.3
Referencia: https://nodejs.org/api/querystring.html
fuente
Sugiero usar la
URLSearchParams
interfaz:O pasando el objeto de búsqueda al constructor así:
fuente
Una pequeña enmienda a la solución aceptada por el usuario187291:
La comprobación de hasOwnProperty en el objeto hace que JSLint / JSHint esté contento, y evita la serialización accidental de métodos del objeto u otras cosas si el objeto no es un simple diccionario. Consulte el párrafo para ver las declaraciones en esta página: http://javascript.crockford.com/code.html
fuente
Bueno, todos parecen poner su frase aquí, así que aquí va la mía:
fuente
¿Necesitas enviar objetos arbitrarios? Si es así, GET es una mala idea, ya que hay límites en la longitud de las URL que los agentes de usuario y los servidores web aceptarán. Mi sugerencia sería crear una matriz de pares de nombre-valor para enviar y luego crear una cadena de consulta:
fuente
Rails / PHP Style Query Builder
Este método convierte un objeto Javascript en a
URI Query String
. También maneja matrices y objetos anidados (enRails
/PHP
sintaxis):Ejemplo de uso:
fuente
function
exclusiónfalsy
(nulo, indefinido, NaN, '') ...usa JSON.
Eche un vistazo a esta pregunta para obtener ideas sobre cómo implementarla.
fuente
Aquí está la versión coffeescript de la respuesta aceptada. Esto podría ahorrarle tiempo a alguien.
fuente
Aquí hay una versión concisa y recursiva con Object.entries . Maneja matrices anidadas arbitrariamente, pero no objetos anidados. También elimina elementos vacíos:
P.ej:
fuente
Este omite valores nulos / indefinidos
fuente
En ES7 puedes escribir esto en una línea:
fuente
Línea única para convertir Objeto en Cadena de Consulta en caso de que alguien lo necesite nuevamente
fuente
Tengo una solución más simple que no utiliza ninguna biblioteca de terceros y ya es apta para ser utilizada en cualquier navegador que tenga "Object.keys" (también conocido como todos los navegadores modernos + edge + ie):
En ES5
En ES3
fuente
Si desea convertir un objeto anidado de forma recursiva y el objeto puede contener o no matrices (y las matrices pueden contener objetos o matrices, etc.), entonces la solución se vuelve un poco más compleja. Este es mi intento.
También he agregado algunas opciones para elegir si desea grabar para cada miembro del objeto a qué profundidad en el objeto principal se encuentra, y para elegir si desea agregar una etiqueta a los miembros que provienen de matrices convertidas.
Idealmente, debe probar si el parámetro cosa realmente recibe un objeto o una matriz.
fuente
Además de la solución aceptada, esto funciona con objetos y matriz de objetos:
También ha agregado objName si está utilizando parámetros de objeto como en los métodos de acción asp.net mvc.
fuente
Un poco se ve mejor
fuente
Hice una comparación de stringifiers JSON y los resultados son los siguientes:
El más corto entre ellos es la notación de objeto URL .
fuente
ok, es una publicación anterior pero estoy enfrentando este problema y he encontrado mi solución personal ... tal vez pueda ayudar a alguien más ...
fuente
Las respuestas anteriores no funcionan si tiene muchos objetos anidados. En su lugar, puede elegir la función param desde aquí: https://github.com/knowledgecode/jquery-param/blob/master/jquery-param.js ¡ Funcionó muy bien para mí!
fuente
SOLUCIÓN ES6 PARA LA CODIFICACIÓN DE HERRAMIENTAS DE CONSULTA DE UN OBJETO JAVASCRIPT
fuente
Esta es una solución que funcionará para los backends .NET listos para usar. Tomé la respuesta principal de este hilo y la actualicé para satisfacer nuestras necesidades .NET.
fuente
He escrito un paquete solo para eso: object-query-string :)
Admite objetos anidados, matrices, funciones de codificación personalizadas, etc. Ligero y sin jQuery.
devoluciones
fuente
Solo otra forma (sin objeto recursivo):
fuente
Consulte la respuesta @ user187291, agregue "isArray" como parámetro para hacer que la matriz anidada json se convierta.
Para hacer el resultado:
staffId = 00000001 & Detail [0] .identityId = 123456 & Detail [1] .identityId = 654321
fuente
También puede lograr esto usando JavaScript simple .
fuente