2012-07-19 37 views
8

Cố gắng tìm cách tạo {foo:"bar"} từ ?...&foo=bar&... nhưng googled và chỉ nhận được jQuery.params ngược lại. Bất kỳ đề xuất nào vui lòng (được xây dựng trong hàm javascript, jquery, underscore.js - tất cả đều đi)? Hoặc, tôi có cần phải thực hiện nó một mình (không phải là một rắc rối lớn, chỉ cần cố gắng không để phát minh lại bánh xe)?Chuỗi truy vấn Deserialize thành đối tượng JSON

+2

tốt ở đây bạn đi: http://stackoverflow.com/questions/901115/get -query-string-values-in-javascript. Một tìm kiếm nhỏ luôn giúp ích. – ggozad

+0

@ggozad: đã tìm kiếm * chuyển đổi thành JSON/đối tượng *, không chỉ * nhận các giá trị *. Cảm ơn các liên kết! Thật đáng buồn chức năng này không phải là tiêu chuẩn ở đâu đó trong jQuery hay như vậy. – BreakPhreak

Trả lời

6

Tôi đăng bài ở đây chức năng của tôi chỉ trong trường hợp khác sẽ xem xét và sẽ muốn làm cho nó thẳng về phía trước không cần JS jquery bản địa. Bởi vì tôi đang tìm kiếm điều tương tự và cuối cùng làm cho chức năng này sau khi xem những người khác câu trả lời:

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

Thực ra câu trả lời ở trên bởi @talsibony không đưa vào mảng chuỗi truy vấn tài khoản (chẳng hạn như test=1&test=2&test=3&check=wow&such=doge). Đây là triển khai thực hiện của tôi:

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

cho các chuỗi truy vấn đơn giản và bằng phẳng, một cái gì đó như thế này sẽ làm các trick

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 
} 
Các vấn đề liên quan