解决TypeError: string indices must be integers, not str

发布时间 2024-01-12 11:14:08作者: 赏金猎人小熊
点击查看代码
ExtendValue =  {
			"area": "1",
            "info": "{\"year\": 2014, \"a\": 12, \"b\": 3, \"c\":5}",
            "trip_country": "CN"
		}

在按照字典访问的时候,报错。TypeError: string indices must be integers, not str,意思是索引必须是int型不能是字符型。

错误原因
(出这种错误有多种可能,我只记录我遇到的)

经查找发现,是json格式导致的错误,info的value是json数据,python无法直接识别。

解决办法
原来字典存储的对象是json,因此需要把json反解码后才可以读取。

要json.loads(),才能把json格式转为python识别的格式。

加上一行代码:

点击查看代码
ExtendValue["info"]=json.loads(ExtendValue["info"])

拓展
Python json 模块dumps、dump、loads、load的使用
json.dumps将python对象格式化成json字符(将dict转化成str)
json.loads将json字符串解码成python对象(将str转化成dict)

点击查看代码
json_str = json.dumps(data)  # 编码
data = json.loads(json_str)  # 解码
1 2 json.dump主要用来将python对象写入json文件
点击查看代码
f = open('demo.json','w',encoding='utf-8')
json.dump(decode_json,f,ensure_ascii=False)
f.close()
1 2 3 json.load加载json格式文件,返回python对象
点击查看代码
f = open('demo.json','r',encoding='utf-8')
data = json.load(f)
print(data,type(data))
f.close()