如何创建包含多组键值对的JSON对象 而非多个独立对象组成的数组
问题原因
你的代码存在两个核心问题导致输出不符合预期:
setdefault方法为EMAIL/TEST/VAULT键设置的默认值是空列表[],天然就是数组结构- 你每次调用
append方法塞入的是单键值对的小字典,自然就会生成多个对象组成的数组
同时原有逻辑存在分支判断缺陷:匹配到EMAIL的键值对会因为后续独立的if TEST判断不通过,被重复添加到VAULT中。
修正后的代码
def parse_json(self, data): file = 'vault.json' # 避免和内置json模块重名,修改变量名更安全 json_result = {} for obj in data: key, value = obj[0], obj[1] if 'EMAIL' in key: # 默认为空字典,直接赋值键值对 json_result.setdefault('EMAIL', {})[key] = value elif 'TEST' in key: # 用elif避免分支穿透 json_result.setdefault('TEST', {})[key] = value else: json_result.setdefault('VAULT', {})[key] = value with open(file, 'w') as f: dump(json_result, f, indent=2, separators=(',', ':'))
修正后效果
运行上述代码后输出的JSON结构和预期完全一致:
{ "EMAIL":{ "EMAIL_CC":"", "EMAIL_CCO":"", "EMAIL_DESTINY":"teste@gmail.com" } }
内容的提问来源于stack exchange,提问作者Wellington
相关产品推荐
相关产品推荐

