You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中JSON数据过滤与格式化问题:无法通过键索引提取目标数据

问题分析

你遇到的核心问题是混淆了json.loads()和json.dumps()的作用:

  • json.loads()是把JSON字符串转换成Python字典(或其他对象),这一步你已经做对了,得到的data就是可操作的字典。
  • 但你随后用json.dumps()把这个字典又转回了JSON字符串,所以data2本质是一个字符串,而不是字典——这就是为什么你用data2['result']会报错string indices must be integers,因为字符串只能用整数下标来访问。

另外还有两个小细节需要修正:

  1. 代码里的dados是笔误,应该是data;
  2. 接口返回的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()
分步解释
  1. 保留json.loads()的结果data(字典类型),完全不需要用json.dumps()转成字符串;
  2. 接口返回的result格式是"Data: {xxx}",先用replace()去掉无用的前缀;如果前缀可能变化,也可以用result_str.split(": ", 1)[1]来分割获取后半部分;
  3. 对处理后的嵌套JSON字符串再次调用json.loads(),得到内层可操作的字典;
  4. 最后直接用键名'data'就能提取到你要的"14/10"。

内容的提问来源于stack exchange,提问作者Luna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 19:37:48