如何用Python读取docx中的JSON内容并转换为字典列表?
解决JSON字符串转字典列表的问题
你遇到的问题核心有两个:一是docx里的原始内容不是有效的JSON格式(两个对象之间缺少逗号分隔),二是直接用dict()函数转换JSON字符串的方式完全错误——dict()不接受JSON字符串作为参数,它需要的是键值对组成的可迭代对象(比如[("name", "ravi"), ...]这种结构)。
下面是正确的解决步骤和代码:
步骤1:修复并解析JSON内容
读取docx文本后,我们先把无效的JSON格式修复为标准格式,再用Python内置的json模块解析,这是处理JSON字符串的标准方式。
完整代码:
from docx import Document import json # 读取docx文件内容 document = Document('2255858_1321163255_worldcupdata.docx') s = "" for para in document.paragraphs: s += para.text.strip() # 去除段落文本中的多余空格和换行 # 修复JSON格式:把 "} {" 替换成 "}, {",让数组内的对象用逗号分隔 fixed_json_str = s.replace("} {", "}, {") # 解析成字典列表 try: dict_list = json.loads(fixed_json_str) print(dict_list) # 直接操作列表中的字典 for item in dict_list: print(f"Name: {item['name']}, City: {item['city']}, Country: {item['country']}") except json.JSONDecodeError as e: print(f"解析JSON出错: {e}")
为什么原代码会报错?
你执行dict('{ "name": "ravi", ... }')时,Python会把字符串当成可迭代对象逐个字符遍历,每个字符是长度为1的元素,但dict()要求每个元素是长度为2的键值对(比如('key', 'value')),所以才会抛出ValueError: dictionary update sequence element #0 has length 1; 2 is required这个错误。
额外说明
如果docx里的原始内容还有其他不规范格式(比如多余的空格、换行),可以先用strip()处理段落文本;如果遇到更复杂的非标准JSON,也可以尝试第三方库demjson做容错解析,但一般情况下修复逗号的方式就足够解决你的问题了。
内容的提问来源于stack exchange,提问作者Pyd




