\

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エンコードすることが可能であることを覚えておきましょう。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です