jQueryからPOSTした値を連想配列にする@python
ブラウザからサーバーに連想配列のような値を渡したいときがあります。
phpではinputタグの中の値を
とすれば、フォームを送信すると、自動的に連想配列としてアクセスできます。
name="abc[a][b][c] value="some_value"
が、pythonではキーが"abc[a][b][c]"というような文字列になってしまい、
連想配列として扱えませんでした。
abc.a.b.cになっていれば分解してくれるモジュールがあったと思いますが、
jQueryのPOSTは角括弧の方になっているので、
リクエストのキーを連想配列に分解する関数を自分で書きました。
ただし、全く同じキーがあるときは後で読まれた値しか入らないようになっているので、
使うときはその辺りにご注意ください。
#sample data params = { "abc[a][b][c]": "@m1m0r1", "abc[a][b][d]": "@shinout", "abc[a][c]": "@gemmbu", } requestToDict(params)
のようにして使います。
以下コードです。
def requestToDict(params): def buildDict(d, keylist, value): if not keylist: return value key = keylist[0] if key not in d: d[key] = buildDict(dict(), keylist[1:], value) else: buildDict(d[key], keylist[1:], value) return d def setval(d, key, value): keylist = key.replace("]", "").split("[") #keylistを作る buildDict(d, keylist, value) dic = {} for key, val in params.iteritems(): setval(dic, key, val) return dic