You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用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

火山引擎 最新活动