2010-07-22 26 views
125

Estoy tratando de encontrar información sobre cómo serializar un objeto para consultar el formato de cadena, pero todas mis búsquedas se están ahogando en resultados sobre cómo ir a la inversa (string/form/lo que sea a JSON).Serializar objeto para consultar cadena en JavaScript/jQuery

tengo

{ one: 'first', two: 'second' } 

y quiero

?one=first&two=second 

¿Hay una buena manera de hacer esto? No me importa plugins o whatnots - si el código de encuentro no es un plug-in, probablemente voy a volver a escribir a uno de todos modos ...

+3

Aquí hay algunas buenas soluciones simples de JS: http://stackoverflow.com/questions/1714786/querystring-encoding-of-a-javascript-object Algunos de ellos no son más largos que las soluciones de framwork aquí. –

Respuesta

203

¿Quieres $.param(): http://api.jquery.com/jQuery.param/

Específicamente, usted quiere esto:

var data = { one: 'first', two: 'second' }; 
var result = $.param(data); 

Cuando se le dé algo como esto:

{a: 1, b : 23, c : "[email protected]#st"} 

$.param volverá esto:

a=1&b=23&c=te!%40%23st 
+8

Tenga en cuenta que si tiene una matriz en su objeto, no se parametriza correctamente. – crv

+2

@crv: Derecha. JSON es probablemente el mejor en ese caso –

+0

@crv Tengo una matriz en el mío y está funcionando bien. –

12

Otra opción podría ser node-querystring.

Está disponible tanto en npm como en bower, por lo que lo he estado usando.

43

Para una función rápida no JQuery ...

function jsonToQueryString(json) { 
    return '?' + 
     Object.keys(json).map(function(key) { 
      return encodeURIComponent(key) + '=' + 
       encodeURIComponent(json[key]); 
     }).join('&'); 
} 

Nota esto no manejar matrices u objetos anidados.

+1

Cool, funciona! Solo agregué 'if (json [key]! = Null)' para omitir los nulos –

+1

Esta es una buena solución, solo de JavaScript. Uno puede asignar la llamada a 'Object.keys' a una variable' params' y 'return params.length && params.join ('&') || "" 'para los casos en que el objeto puede estar vacío, es decir,' json = {} '. –

+0

Esto funciona mejor que '$ .param' porque param codifica las formas y no las URL, por lo que con param el espacio se convierte en' + 'en lugar de'% 20', lo que puede causar todo tipo de problemas, especialmente con MVC – NibblyPig

Cuestiones relacionadas