2012-07-19 135 views
8

試圖找到如何使{foo:"bar"}?...&foo=bar&...,但使用Google搜索,只得到jQuery.params,這是相反的。任何建議請(內置JavaScript功能,jqueryunderscore.js - 一切都好)?或者,我是否需要自己來實現它(不是一個大麻煩,只是試圖不重新發明輪子)?將查詢字符串反序列化爲JSON對象

+2

以及在這裏你去:http://stackoverflow.com/questions/901115/get -query-string-values-in-javascript。一點搜索總是有幫助的。 – ggozad 2012-07-19 09:27:59

+0

@ggozad:搜索*到JSON/object *的轉換,而不僅僅是獲取值*。感謝您的鏈接!可悲的是,這個功能並不是jQuery中某處的標準。 – BreakPhreak 2012-07-19 09:30:06

回答

6

我張貼在這裏我的功能,以防萬一其他會看起來,並希望得到它直接沒有需要jquery原生JS。因爲我一直在尋找同樣的事情,最後查看其他人的答案後做出這樣的功能:

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

實際@talsibony上面的回答沒有考慮到查詢字符串數組(如test=1&test=2&test=3&check=wow&such=doge)。這是我的實現:

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

簡單和平坦的查詢字符串,這樣的事情會做的伎倆

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 
} 
相關問題