2012-07-19 19 views
8

Ho provato a trovare come effettuare {foo:"bar"} da ?...&foo=bar&... ma ho cercato su Google e ottenuto solo per jQuery.params che fa l'opposto. Qualsiasi suggerimento per favore (funzione javascript integrata, jquery, underscore.js - tutto va)? Oppure, devo implementarlo da solo (non una grande seccatura, solo cercando di non reinventare la ruota)?Deserializzare la stringa di query sull'oggetto JSON

+2

bene qui si va: http://stackoverflow.com/questions/901115/get -query-string-values-in-javascript. Una piccola ricerca aiuta sempre. – ggozad

+0

@ggozad: cercato * una conversione in JSON/object *, non solo * ottenendo valori *. grazie per il link! purtroppo questa funzione non è standard da qualche parte in jQuery o giù di lì. – BreakPhreak

risposta

6

Sto postando qui la mia funzione nel caso in cui altri appariranno e vorranno andare avanti senza bisogno di JS jQuery nativo. Perché stavo cercando la stessa cosa e finalmente fatto questa funzione dopo aver visto altre risposte:

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

In realtà la risposta di cui sopra da @talsibony non tiene array di stringhe di query account (ad esempio test=1&test=2&test=3&check=wow&such=doge). Questa è la mia realizzazione:

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

per stringhe di query semplici e piane, qualcosa come questo farà il trucco

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 
} 
Problemi correlati