从JSON提取值作为新字典键的Python实现问题求助
问题分析与解决
首先看你当前代码里的几个关键问题:
- 错误的检查对象:你写了
if 'code' in content,但content是打开的文件对象,不是加载后的JSON数据,应该检查'code' in json_file(也就是你用json.load(content)得到的字典)。 - 字典更新语法错误:
full.update[c_id:text]完全不符合Python字典的语法,正确的赋值应该是full_text[c_id] = 合并后的文本,或者用full_text.update({c_id: text})。 - 不必要的循环内拼接:你在遍历
body_text的循环里每次都执行text = " ".join(temp),这会导致每次循环都重复拼接已经添加的内容,应该等所有text都加入temp后,再统一拼接一次。 - 变量名不一致:你定义的字典是
full_text,但后面用了full.update,这会导致NameError。
修正后的完整代码
import json full_text = {} # 推荐用原始字符串避免Windows路径的转义问题,或者双斜杠写法 file_path = r"C:\root\test.json" with open(file_path, 'r', encoding='utf-8') as content: try: json_file = json.load(content) # 先验证JSON里是否包含必要的字段 if 'code' in json_file and 'body_text' in json_file: c_id = json_file['code'] temp = [] # 遍历收集所有text内容,同时检查每个item是否存在text键 for item in json_file["body_text"]: if 'text' in item: temp.append(item["text"]) # 统一合并所有文本内容 combined_text = " ".join(temp) # 给目标字典赋值 full_text[c_id] = combined_text else: print("JSON数据缺少必要的code或body_text字段") except json.JSONDecodeError: print("文件不是有效的JSON格式") except Exception as e: print(f"处理时发生错误: {str(e)}") print(full_text)
优化细节说明
- 添加了
encoding='utf-8'参数,避免不同系统下的文件编码读取问题 - 增加了多层字段存在性检查,防止因为JSON结构不完整抛出
KeyError - 细分异常类型,方便定位是JSON格式错误还是其他运行时错误
- 路径使用原始字符串写法,避免Windows路径的转义陷阱
运行这段代码后,就能得到你期望的字典结构:{'C568219u': 'some text more text'}。
内容的提问来源于stack exchange,提问作者Nip
相关产品推荐
相关产品推荐

