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))))上面的函数能不能单独处理字典跟列表
时间: 2024-01-28 07:02:58 浏览: 162
这段代码是一个将 JSON 数据转化为 URL 参数的函数,其中 isinstance(value, (dict, list))
判断了参数值是否为字典或列表类型。如果是,就进行递归处理,否则就将值进行 URL 编码后拼接成键值对。
如果你想单独处理字典或列表类型的参数,可以将 isinstance(value, (dict, list))
这个判断语句去掉,然后对参数值进行判断即可。示例如下:
from urllib.parse import quote_plus
def dict_to_url_params(params):
url_params = []
for key, value in params.items():
if isinstance(value, dict):
# 对字典类型的值进行递归处理
sub_params = dict_to_url_params(value)
url_params.extend([(f"{key}[{sub_key}]", sub_value) for sub_key, sub_value in sub_params])
elif isinstance(value, list):
# 对列表类型的值进行递归处理
sub_params = list_to_url_params(value)
url_params.extend([(f"{key}[]", sub_value) for sub_value in sub_params])
else:
# 对其他类型的值进行 URL 编码后拼接成键值对
url_params.append((key, quote_plus(str(value))))
return url_params
def list_to_url_params(params):
url_params = []
for index, value in enumerate(params):
if isinstance(value, dict):
# 对字典类型的值进行递归处理
sub_params = dict_to_url_params(value)
url_params.extend([(f"[{index}][{sub_key}]", sub_value) for sub_key, sub_value in sub_params])
elif isinstance(value, list):
# 对列表类型的值进行递归处理
sub_params = list_to_url_params(value)
url_params.extend([(f"[{index}][]", sub_value) for sub_value in sub_params])
else:
# 对其他类型的值进行 URL 编码后拼接成键值对
url_params.append((f"[{index}]", quote_plus(str(value))))
return url_params
这个示例代码中,dict_to_url_params()
函数是将字典类型的参数转化为 URL 参数,list_to_url_params()
函数是将列表类型的参数转化为 URL 参数。这两个函数都是通过递归处理的方式来处理嵌套的字典或列表类型的值。
阅读全文
相关推荐


















