如何将多根元素JSON读取为Python dict而非list?
问题
想要读取包含多个元素的JSON文件并转为Python的dict,但当前读取后得到的是list。移除JSON的[]只能读取第一个元素,询问是否需要修改JSON格式,以及如何处理。
原始JSON文件
[{ "id": 1, "first_name": "Jeanette", "last_name": "Penddreth", "email": "jpenddreth0@census.gov", "gender": "Female", "ip_address": "26.58.193.2" },{ "id": 2, "first_name": "Giavani", "last_name": "Frediani", "email": "gfrediani1@senate.gov", "gender": "Male", "ip_address": "229.179.4.212" },{ "id": 3, "first_name": "Noell", "last_name": "Bea", "email": "nbea2@imageshack.us", "gender": "Female", "ip_address": "180.66.162.255" },{ "id": 4, "first_name": "Willard", "last_name": "Valek", "email": "wvalek3@vk.com", "gender": "Male", "ip_address": "67.76.188.26" }]
原始Python代码
import json with open("data.json", "r") as file: data = file.read() json_obj = json.loads(data) print(type(json_obj))
当前输出
<class 'list'>
预期输出
<class 'dict'>
解决方案
方案一:修改JSON格式(符合标准JSON结构)
标准JSON要求仅有一个根元素,你当前的根元素是数组(对应Python的list)。要得到dict,只需把数组包裹在一个对象里,新增一个键(比如"users")存放数组即可:
修改后的JSON:
{ "users": [ { "id": 1, "first_name": "Jeanette", "last_name": "Penddreth", "email": "jpenddreth0@census.gov", "gender": "Female", "ip_address": "26.58.193.2" },{ "id": 2, "first_name": "Giavani", "last_name": "Frediani", "email": "gfrediani1@senate.gov", "gender": "Male", "ip_address": "229.179.4.212" },{ "id": 3, "first_name": "Noell", "last_name": "Bea", "email": "nbea2@imageshack.us", "gender": "Female", "ip_address": "180.66.162.255" },{ "id": 4, "first_name": "Willard", "last_name": "Valek", "email": "wvalek3@vk.com", "gender": "Male", "ip_address": "67.76.188.26" } ] }
对应Python读取代码:
import json with open("data.json", "r") as file: json_obj = json.load(file) print(type(json_obj)) # 输出 <class 'dict'> # 通过 json_obj["users"] 可获取原用户数组
方案二:不修改JSON,在Python中转换为dict
如果不想改动JSON文件,可以将读取到的list转为以id为键的dict,方便通过id快速定位用户:
import json with open("data.json", "r") as file: user_list = json.load(file) # 转换为以id为键的dict user_dict = {user["id"]: user for user in user_list} print(type(user_dict)) # 输出 <class 'dict'> # 示例:获取id为1的用户 print(user_dict[1])
内容的提问来源于stack exchange,提问作者formlessform
相关产品推荐
相关产品推荐

