JSON数据处理报错“string indices must be integers”问题排查
错误原因
你当前的JSON文件结构存在嵌套序列化的问题:外层数组的每个元素不是JSON对象,而是提前被转义过的JSON字符串。你调用json.loads(file.read())后得到的data是字符串数组,data[0]属于字符串类型,自然不能通过['user_id']这种字典键名的方式取值,因此触发TypeError: string indices must be integers报错。
解决方案
有两种修复方式,可根据你的场景选择:
- 方案1:不修改现有JSON文件,读取时二次反序列化
对第一次反序列化得到的每个字符串元素,再做一次JSON解析即可得到可按键取值的字典:import json with open("AccInformation.json") as file: str_list = json.loads(file.read()) # 逐个解析数组中的JSON字符串 data = [json.loads(item) for item in str_list] print(data[0]['user_id']) - 方案2:调整JSON生成逻辑(更推荐)
生成JSON文件时不要把内层对象单独转成字符串再存入数组,直接生成标准的对象数组格式,修改后的JSON示例如下:
这种情况下你原本的代码无需修改即可正常运行。[ {"user_id": 88387467586, "firstName": "Murat", "lastName": "KOÇ", "email": "vehbikoc@kocholding.com.tr", "username": "kocholding", "password": "123456789", "accountKEY": "Y29K-G6LF-MRDI-PT5S-BZ1Q-VA4N", "register_date": "Mon Aug 30 02:01:31 2021"}, {"user_id": 33233303603, "firstName": "Sema", "lastName": "UZUN", "email": "sema12@gmail.com", "username": "semazen", "password": "123456789", "accountKEY": "ZW2G-7960-HPQA-5SKX-LTDJ-YBCE", "register_date": "Mon Aug 30 14:42:39 2021"} ]
内容的提问来源于stack exchange,提问作者Einsatzgrup
相关产品推荐
相关产品推荐

