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对应的列表即可,两种常见实现方式:
- 解析时直接提取列表:
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
- 先解析为字典,再单独提取列表:
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
相关产品推荐
相关产品推荐

