import json from urllib.parse import quote_plus def json_to_url_params(json_obj): """将复杂的 JSON 对象转换为 URL 参数字符串""" if isinstance(json_obj, dict): # 对字典类型的值进行处理 items = json_obj.items() elif isinstance(json_obj, list): # 对列表类型的值进行处理 items = enumerate(json_obj) else: # 对其他类型的值直接返回字符串形式 return str(json_obj) # 递归处理每个键值对,并按 ASCII 码排序 params = [] for key, value in sorted(items, key=lambda x: str(x[0])): if isinstance(value, (dict, list)): # 对嵌套的字典或列表类型的值进行递归处理 sub_params = json_to_url_params(value) params.extend([(f"{key}[{sub_key}]", sub_value) for sub_key, sub_value in sub_params]) else: # 对其他类型的值进行 URL 编码后拼接成键值对 params.append((str(key), quote_plus(str(value)))) return params # 示例 JSON 字符串 json_str = '{"a": {"b": {"c": 1}, "d": [2, 3]}, "e": "f"}' # 将 JSON 字符串转换为 Python 对象 json_obj = json.loads(json_str) # 将 Python 对象转换为 URL 参数字符串 params = json_to_url_params(json_obj) # 将 URL 参数字符串拼接成完整的 URL url = "&".join([f"{key}={value}" for key, value in params]) print(url) 上面代码如果json中value存在中文字符串要特殊处理吗
时间: 2024-04-27 21:23:18 浏览: 155
json_with_python_symbian_60.rar_json symbian_python_python json_
在这个代码中,如果 JSON 中存在中文字符串,会自动被转换为 Unicode 编码,并使用 `quote_plus()` 函数进行 URL 编码。因此,不需要对中文字符串进行特殊处理。
`quote_plus()` 函数可以将字符串中的特殊字符编码成 URL 安全的形式,包括将空格编码为加号 `+`,将非 ASCII 字符编码为 `%XX` 的形式。例如,将中文字符串 "你好" 编码为 URL 参数时,会被转换为 `%E4%BD%A0%E5%A5%BD`。
因此,如果 JSON 中存在中文字符串,会被转换为 Unicode 编码,然后使用 `quote_plus()` 函数进行 URL 编码。在拼接 URL 时,这些编码后的字符串会被正确地拼接为 URL 参数。
阅读全文