You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何正确比较两个JSON字典?(含错误排查)

解决你的字典比较TypeError问题

嘿,咱们先把问题拆解开——你碰到的TypeError: string indices must be integers错误,根源出在这行代码:n_temp_new = json.dumps(n_temp, ensure_ascii=False)。

你看,json.load(f)已经把palestra.json里的内容转成了Python字典n_temp,这一步是对的。但紧接着你用json.dumps()把这个字典又转回了JSON格式的字符串,然后你试图用n_temp_new['giorno']去访问这个字符串的内容——这就错了,字符串只能用整数下标(比如n_temp_new[0])来取单个字符,根本不支持用字典键名来索引。

修正后的代码

直接去掉多余的json.dumps()步骤,用加载出来的字典直接做比较就行:

#!/usr/bin/env python
import json

template = {"giorno": 21, "mese": "aprile", "ora": "21"}
newww = "palestra.json"
g_temp = template['giorno']

with open(newww, 'r') as f:
    n_temp = json.load(f)

print(n_temp)  # 输出的是Python原生字典
# 直接用字典的键访问对应值做比较
if g_temp == n_temp['giorno']:
    print("no")
else:
    print("yes")

额外补充:整体比较字典

如果你想直接判断两个字典(模板和JSON加载的内容)是否完全一致,还可以简化成:

if template == n_temp:
    print("两个字典完全匹配")
else:
    print("两个字典有差异")

再理清楚json模块的两个核心方法:

  • json.load():负责反序列化,把JSON文件/字符串转成Python的字典、列表等原生数据结构,这是你加载JSON文件时需要用的。
  • json.dumps():负责序列化,把Python对象转成JSON格式的字符串,只有当你需要把数据转成字符串存储、传输的时候才需要用到它,这里完全没必要。

内容的提问来源于stack exchange,提问作者Luca Deila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:54:26