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

Python中误用json.dumps访问JSON字段触发TypeError问题求助

问题分析与解决

你遇到的错误根源很清晰:你把解析好的Python字典又转成了字符串,然后试图用字符串索引去访问它的键。我来拆解一下问题:

  • json.loads(line) 已经把每行的JSON文本转换成了可操作的Python字典,这才是你需要处理的对象。
  • 但你紧接着调用了 json.dumps(...),这个函数是把Python字典重新转回格式化的JSON字符串。所以distros_dict实际上变成了一个字符串,而不是字典,自然不能用['from']这种键来访问,这就触发了TypeError。

修正后的代码

要获取每条数据的from字段内容,直接操作json.loads()返回的字典即可,不需要额外转成字符串。另外注意,你的from字段值是一个嵌套字典,如果你需要的是里面的$oid具体值,还要多一层索引:

import json
with open('klinks_buildson.json', 'r') as f:
    for line in f:
        # 直接将JSON行转为Python字典
        distros_dict = json.loads(line)
        # 获取from字段的完整内容(包含$oid的嵌套字典)
        print(distros_dict['from'])
        # 如果只需要$oid的具体值,替换成下面这行
        # print(distros_dict['from']['$oid'])
        print("\n")

额外优化提示

  • 如果你既想打印格式化后的JSON字符串,又要获取字段值,可以分开操作:
    import json
    with open('klinks_buildson.json', 'r') as f:
        for line in f:
            distros_dict = json.loads(line)
            # 打印格式化后的JSON文本
            print(json.dumps(distros_dict, sort_keys=True, indent=4))
            # 获取并打印from字段
            print(distros_dict['from'])
            print("\n")
    
  • 为了避免某行数据缺失from字段导致程序崩溃,建议用更安全的dict.get()方法:
    print(distros_dict.get('from', '无from字段'))
    

内容的提问来源于stack exchange,提问作者Viral Patel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:55:14