1. ホーム
  2. javascript

[解決済み] URLパラメータをJavaScriptのオブジェクトに変換する方法は?[重複しています]。

2022-03-16 15:41:26

質問

こんな文字列があるんです。

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

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

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

解決方法は?

2021年には... 時代遅れとお考えください。

編集

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

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

構文解析 abc=foo&def=%5Basf%5D&xyz=5 を5つのステップで説明します。

  • decodeURI: 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である。

An 改良型ソリューション は、検索文字列の文字数を増やすことができます。URIのデコードにリバイバー関数を使用しています。

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,"\":\"")) + '"}')