URL パラメータを JavaScript オブジェクトに変換するにはどうすればいいですか? [重複] 質問する

URL パラメータを JavaScript オブジェクトに変換するにはどうすればいいですか? [重複] 質問する

次のような文字列があります:

abc=foo&def=%5Basf%5D&xyz=5

これをこのように JavaScript オブジェクトに変換するにはどうすればよいでしょうか?

{
  abc: 'foo',
  def: '[asf]',
  xyz: 5
}

ベストアンサー1

2021年現在…これは時代遅れとお考えください。

編集

この編集では、コメントに基づいて回答を改善し、説明します。

var search = location.search.substring(1);
JSON.parse('{"' + decodeURI(search).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g,'":"') + '"}')

abc=foo&def=%5Basf%5D&xyz=55 つのステップで解析します。

  • デコードURI: abc=foo&def=[asf]&xyz=5
  • エスケープ引用符: 引用符がないので同じ
  • 交換する &:abc=foo","def=[asf]","xyz=5
  • 置換 =:abc":"foo","def":"[asf]","xyz":"5
  • 中括弧と引用符で囲みます:{"abc":"foo","def":"[asf]","xyz":"5"}

これは合法的な JSON です。

改善されたソリューションでは、検索文字列にさらに多くの文字を使用できます。URI デコードに reviver 関数を使用します。

var search = location.search.substring(1);
JSON.parse('{"' + search.replace(/&/g, '","').replace(/=/g,'":"') + '"}', function(key, value) { return key===""?value:decodeURIComponent(value) })

search = "abc=foo&def=%5Basf%5D&xyz=5&foo=b%3Dar";

与える

Object {abc: "foo", def: "[asf]", xyz: "5", foo: "b=ar"}

元の回答

ワンライナー:

JSON.parse('{"' + decodeURI("abc=foo&def=%5Basf%5D&xyz=5".replace(/&/g, "\",\"").replace(/=/g,"\":\"")) + '"}')

おすすめ記事