次のような文字列があります:
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=5
5 つのステップで解析します。
- デコード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,"\":\"")) + '"}')