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

Python中JSON转字典:合法JSON一段访问报错的原因及解决方法问询

问题1:为什么第一个示例无法正常运行?

因为string_js3解析后得到的是一个字典(dict),而非列表(list)。它的外层结构是一个包含employees键的对象,这个键对应的值才是员工数据列表。当你执行L1[0]时,Python会尝试用数字0作为键去访问字典,但字典的键是字符串(这里是"employees"),所以会抛出KeyError错误。

直观来看,解析string_js3后L1的结构是:

{
    "employees": [
        {"FNAME":"FTestA", "LNAME":"LTestA", "SSN":6668844441},
        {"FNAME":"FTestB", "LNAME":"LTestB", "SSN":6668844442}
    ]
}

你直接用L1[0]访问,相当于在找字典里键为0的元素,这显然不存在,因此报错。

问题2:有没有简便方法让第一个示例也能正常运行?

当然有!只需要在解析后先取出employees对应的列表即可,两种常见实现方式:

  1. 解析时直接提取列表:
import json
string_js3 = """{"employees": [ { "FNAME":"FTestA", "LNAME":"LTestA", "SSN":6668844441 }, { "FNAME":"FTestB", "LNAME":"LTestB", "SSN":6668844442 } ]} """
L1 = json.loads(string_js3)["employees"]  # 直接获取employees对应的列表
print(L1[0]['FNAME'])  # 正常输出FTestA
  1. 先解析为字典,再单独提取列表:
import json
string_js3 = """{"employees": [ { "FNAME":"FTestA", "LNAME":"LTestA", "SSN":6668844441 }, { "FNAME":"FTestB", "LNAME":"LTestB", "SSN":6668844442 } ]} """
L1_dict = json.loads(string_js3)
L1 = L1_dict["employees"]
print(L1[0]['FNAME'])  # 同样正常输出FTestA

这样处理后,L1就和string_js4解析后的列表结构完全一致,后续的访问逻辑可以保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:25:59