2012-07-19 130 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 
} 
相关问题