2012-07-19 13 views
8

zu finden versucht, wie {foo:"bar"} von ?...&foo=bar&... zu machen, aber googeln und bekam nur jQuery.params die das Gegenteil der Fall ist. Irgendwelche Vorschläge bitte (eingebaute JavaScript-Funktion, jquery, underscore.js - alles geht)? Oder muss ich es selbst implementieren (kein großer Aufwand, nur nicht das Rad neu erfinden)?Deserialize Query-String zu JSON-Objekt

+2

auch den Trick hier geht: http://stackoverflow.com/questions/901115/get -query-string-values-in-javascript. Eine kleine Suche hilft immer. – ggozad

+0

@ggozad: nach einer * Umwandlung in JSON/Objekt * gesucht, nicht nur * Werte erhalten *. Danke für den Link! Leider ist diese Funktion irgendwo in jQuery nicht üblich. – BreakPhreak

Antwort

6

Ich poste hier meine Funktion, nur für den Fall, dass andere aussehen wird und will es direkt zu bekommen keine Notwendigkeit für Jquery native JS. Weil ich für die gleiche Sache gesucht und schließlich machte diese Funktion nach anderen Antworten angezeigt:

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

Tatsächlich ist die oben genannte Antwort von @talsibony nimmt nicht berücksichtigt Query-String-Arrays (wie test=1&test=2&test=3&check=wow&such=doge). Dies ist meine Implementierung:

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

für die einfache und flache Abfrage-Strings, so etwas wie dies

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 
}