Python中JSON数据过滤与格式化问题:无法通过键索引提取目标数据
问题分析
你遇到的核心问题是混淆了json.loads()和json.dumps()的作用:
json.loads()是把JSON字符串转换成Python字典(或其他对象),这一步你已经做对了,得到的data就是可操作的字典。- 但你随后用
json.dumps()把这个字典又转回了JSON字符串,所以data2本质是一个字符串,而不是字典——这就是为什么你用data2['result']会报错string indices must be integers,因为字符串只能用整数下标来访问。
另外还有两个小细节需要修正:
- 代码里的
dados是笔误,应该是data; - 接口返回的
result值本身还是一个嵌套的JSON字符串(比如"Data: {\"prescription\":\"Nimesulida \",\"data\":\"14/10\"}"),需要先去掉前缀"Data: ",再二次解析成字典才能提取data字段。
修正后的代码
import json import urllib3 http = urllib3.PoolManager() user = '' def data_json(): url = '' + user r = http.request('GET', url) # 第一步:把响应内容解析成Python字典 data = json.loads(r.data.decode('utf-8')) # 第二步:取出result字段,去掉前缀"Data: " result_str = data['result'].replace("Data: ", "") # 第三步:把嵌套的JSON字符串再次解析成字典 nested_data = json.loads(result_str) # 第四步:提取目标data字段 target_data = nested_data['data'] print(target_data) # 输出:14/10 data_json()
分步解释
- 保留
json.loads()的结果data(字典类型),完全不需要用json.dumps()转成字符串; - 接口返回的
result格式是"Data: {xxx}",先用replace()去掉无用的前缀;如果前缀可能变化,也可以用result_str.split(": ", 1)[1]来分割获取后半部分; - 对处理后的嵌套JSON字符串再次调用
json.loads(),得到内层可操作的字典; - 最后直接用键名
'data'就能提取到你要的"14/10"。
内容的提问来源于stack exchange,提问作者Luna
相关产品推荐
相关产品推荐

