PHPにはhttp_build_query
という便利な関数がありますが、Pythonにはそのままの関数は存在しません。しかし、Pythonでも同様の機能を実現することは可能です。以下にその方法を示します。
まず、Pythonのurllib.parse
モジュールのurlencode
関数を使用します。この関数は、辞書型のデータをURLエンコードされた文字列に変換します。ただし、この関数だけではネストした辞書を適切に処理できないため、ネストした辞書をフラットな辞書に変換するための補助関数が必要です。
from collections.abc import MutableMapping
from urllib.parse import urlencode, unquote
def flatten(dictionary, parent_key=False, separator='.'):
items = []
for key, value in dictionary.items():
new_key = str(parent_key) + separator + key if parent_key else key
if isinstance(value, MutableMapping):
items.extend(flatten(value, new_key, separator).items())
else:
items.append((new_key, value))
return dict(items)
# 使用例
data = {
"targeting": [
{
"country": {
"allow": ["US", "DE"]
},
"os": {
"allow": [
{"name": "Android", "comparison": "GTE", "version": "2.3.1"},
{"name": "Apple TV Software", "comparison": "EQ", "version": "4.4"},
{"name": "Windows", "comparison": "EQ", "version": "Vista"}
]
}
}
]
}
flat_data = flatten(data)
encoded_data = urlencode(flat_data)
このコードでは、まずflatten
関数でネストした辞書をフラットな辞書に変換し、その後urlencode
関数でURLエンコードされた文字列に変換しています。これにより、PHPのhttp_build_query
と同等の機能をPythonで実現することができます。
以上がPythonでPHPのhttp_build_query
を実装する方法です。PythonでもPHPと同じようにデータをURLエンコードすることが可能であることを覚えておきましょう。