Foros del Web » Programando para Internet » Javascript »

Deserializar un string con JS

Estas en el tema de Deserializar un string con JS en el foro de Javascript en Foros del Web. Hola. Necsito ayuda con esto, espero me puedan ayudar. Tengo un formulario, y uno de sus campos tiene un value de esta forma: a[]=1&a[]=2&a[]=3&a[]=5 ... ...
  #1 (permalink)  
Antiguo 19/06/2011, 00:04
Avatar de Mike_Wasawsky  
Fecha de Ingreso: noviembre-2008
Mensajes: 10
Antigüedad: 15 años, 5 meses
Puntos: 0
Deserializar un string con JS

Hola.

Necsito ayuda con esto, espero me puedan ayudar.

Tengo un formulario, y uno de sus campos tiene un value de esta forma:

a[]=1&a[]=2&a[]=3&a[]=5 ...

La cosa es que es un array serializado, y necesito deserializarlo talque quede como un array para poder usarlo en javascript.
Espero me puedan ayudar.

Gracias!
  #2 (permalink)  
Antiguo 19/06/2011, 10:02
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 17 años, 4 meses
Puntos: 56
Respuesta: Deserializar un string con JS

Código Javascript:
Ver original
  1. String.prototype.deserializar = function(){
  2.     var encuentra = this.match(/\w+(\[(\w+)?\])?=([\w\d]+)/g), i, l
  3.     var obj = new Array(), old
  4.     for(i=0,l=encuentra.length;i<l;i++){
  5.         var Var = encuentra[i].split(/=/)
  6.         Var[0] = Var[0].replace(/\W+/g,"")
  7.         if(old == Var[0]){
  8.             if(typeof(obj[Var[0]]) != 'object')
  9.                 obj[Var[0]] = [obj[Var[0]]]
  10.             obj[Var[0]].push(Var[1])
  11.         }else{
  12.             old = Var[0]
  13.             obj[Var[0]] = Var[1]
  14.         }
  15.     }
  16.     return obj;
  17. }
  18.  
  19. var texto = "a[]=1&a[]=2&a[]=3&a[]=5&country=PE&otravariable=2011";
  20. var Arr = texto.deserializar();
  21.  
  22. alert(Arr['a'].length) // 4
  23. alert(Arr['a'][0]) // 1
  24. alert(Arr['a'][3]) // 5
  25. alert(Arr['country']) // PE
  26. alert(Arr['otravariable']) // 2011
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */
  #3 (permalink)  
Antiguo 19/06/2011, 11:54
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 12 años, 11 meses
Puntos: 343
Respuesta: Deserializar un string con JS

Version compatible con implementaciones modernas de JavaScript (que implementen Array.reduce más precisamente):

Código Javascript:
Ver original
  1. var t = "a[]=1&a[]=2&a[]=3&a[]=5&country=PE&otravariable=2011";
  2.  
  3. function d(str) {
  4.     return str.split('&').reduce(function(res, item) {
  5.         item = item.split('=');
  6.         var
  7.             key = item[0],
  8.             value= item[1] || null;
  9.  
  10.         if(key.indexOf('[')) {  
  11.             key = key.replace(/(\[|\])/g, '');          
  12.             (res[key] = res[key] || []).push(value);
  13.         } else {
  14.             res[key] = value;
  15.         }
  16.  
  17.         return res;
  18.     }, {});    
  19. }
  20.  
  21. var deserialized = d(t);

Obviamente es una version básica que no incluye recursividad.
__________________
blog | @aijoona
  #4 (permalink)  
Antiguo 20/06/2011, 04:49
Avatar de Mike_Wasawsky  
Fecha de Ingreso: noviembre-2008
Mensajes: 10
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Deserializar un string con JS

Muchas gracias! Me sirvieron los códigos!

Etiquetas: js, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:06.