2012-07-19 16 views
8

{foo:"bar"}?...&foo=bar&...から作る方法を見つけようとしましたが、グーグルでグーグルでjQuery.paramsにしか戻っていません。任意の提案をお願いします(組み込みのjavascript関数、jqueryアンダースコア.js - すべて)それとも、私は自分でそれを実装する必要がありますか(大した手間ではなく、ホイールを再開発したくない)か?クエリ文字列をJSONオブジェクトに逆シリアル化する

+2

うまくトリックを行いますあなたが行く:http://stackoverflow.com/questions/901115/get -query-string-values-in-javascript。小さな検索が常に役立ちます。 – ggozad

+0

@ggozad:値を取得するだけでなく、* JSON /オブジェクト*への変換を検索しました。リンクありがとう!残念なことに、この関数はjQueryのどこかで標準ではありません。 – BreakPhreak

答えて

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 
} 
関連する問題