2012-07-19 23 views
8

Intenté encontrar cómo hacer {foo:"bar"} desde ?...&foo=bar&... pero busqué en Google y obtuve solo el jQuery.params que hace lo contrario. Cualquier sugerencia por favor (función incorporada javascript, jquery, underscore.js - todo va)? ¿O necesito implementarlo solo (no es una gran molestia, solo estoy tratando de no reinventar la rueda)?Deserializar cadena de consulta al objeto JSON

+2

así que aquí tienes: http://stackoverflow.com/questions/901115/get -query-string-values-en-javascript. Una pequeña búsqueda siempre ayuda. – ggozad

+0

@ggozad: buscó una conversión * en JSON/objeto *, no solo * obteniendo valores *. ¡Gracias por el enlace! lamentablemente esta función no es estándar en algún lugar de jQuery más o menos. – BreakPhreak

Respuesta

6

Estoy publicando aquí mi función por si acaso se verá otra y querrá verla de manera directa sin necesidad de jquery native JS. Debido a que estaba buscando lo mismo y finalmente hice esta función después de ver otras respuestas:

function queryStringToJSON(queryString) { 
    if(queryString.indexOf('?') > -1){ 
    queryString = queryString.split('?')[1]; 
    } 
    var pairs = queryString.split('&'); 
    var result = {}; 
    pairs.forEach(function(pair) { 
    pair = pair.split('='); 
    result[pair[0]] = decodeURIComponent(pair[1] || ''); 
    }); 
    return result; 
} 


console.log(queryStringToJSON(window.location.href)); 
console.log(queryStringToJSON('test=1&check=wow'));//Object {test: "1", check: "wow"} 
6

En realidad la respuesta anterior por @talsibony no tiene en cuenta las matrices de cadenas de consulta (como test=1&test=2&test=3&check=wow&such=doge). Este es mi aplicación:

function queryStringToJSON(qs) { 
    qs = qs || location.search.slice(1); 

    var pairs = qs.split('&'); 
    var result = {}; 
    pairs.forEach(function(p) { 
     var pair = p.split('='); 
     var key = pair[0]; 
     var value = decodeURIComponent(pair[1] || ''); 

     if(result[key]) { 
      if(Object.prototype.toString.call(result[key]) === '[object Array]') { 
       result[key].push(value); 
      } else { 
       result[key] = [ result[key], value ]; 
      } 
     } else { 
      result[key] = value; 
     } 
    }); 

    return JSON.parse(JSON.stringify(result)); 
}; 
1

de cadenas de consulta simple y plana, algo como esto hará el truco

const queryStringToObject = (queryString) => { 
    let obj = {} 
    if(queryString) { 
    queryString.slice(1).split('&').map((item) => { 
     const [ k, v ] = item.split('=') 
     v ? obj[k] = v : null 
    }) 
    } 
    return obj 
}