Python如何通过字典生成合规JSON 解决末尾多余逗号问题
解决方案
推荐方案:使用Python标准库json模块
Python自带的json模块是字典转JSON的原生官方方案,会自动处理JSON语法规则、转义字符、数组末尾逗号等问题,完全不需要手动拼接字符串,完美适配任意动态变化的输入数据。
import json # 你的原始字典数据 dictionary = { 'bucket1': 'bucket1a', 'bucket2': 'bucket2b', 'bucket3': 'bucket3c' } # 生成Resource数组 resource_list = [] for k in dictionary.keys(): resource_list.append(f"arn:aws:s3:::{k}") resource_list.append(f"arn:aws:s3:::{k}/*") # 构造完整的Policy结构字典 policy = { "Effect": "Allow", "Action": ["s3:*"], "Resource": resource_list } # 转成格式化的JSON字符串,indent=4控制缩进为4空格 json_str = json.dumps(policy, indent=4) print(json_str)
该方案输出的JSON完全符合标准格式,不会出现多余逗号,也会自动处理特殊字符转义等边界问题。
可选:修复原有手动拼接逻辑(不推荐)
如果一定要沿用手动拼接的写法,可以先把所有Resource项收集为列表,再用字符串join方法拼接,避免末尾多余逗号:
dictionary = { 'bucket1': 'bucket1a', 'bucket2': 'bucket2b', 'bucket3': 'bucket3c' } # 先收集所有Resource条目 resource_items = [] for k in dictionary.keys(): resource_items.append(f"\"arn:aws:s3:::{k}\"") resource_items.append(f"\"arn:aws:s3:::{k}/*\"") # 用逗号+缩进拼接所有条目,不会产生末尾逗号 resource_content = ",\n\t\t\t".join(resource_items) mystring = f"\t{{\n\t\t\"Effect\": \"Allow\",\n\t\t\"Action\": [\"s3:*\"],\n\t\t\"Resource\": [\n\t\t\t{resource_content}\n\t\t]\n\t}}" print(mystring)
手动拼接仅适合简单固定场景,遇到键名含引号、特殊字符等场景容易触发JSON格式错误,生产环境优先使用json模块。
内容的提问来源于stack exchange,提问作者Ken J
相关产品推荐
相关产品推荐

