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

Python如何解析JSON字符串并提取指定key对应的value值

问题原因

  • 你调用r.json()得到字符串类型的原因:服务端返回的是双层序列化的JSON结果,也就是服务端先把字典序列化为JSON字符串,再把这个字符串作为值封装到了响应体中,因此r.json()直接解析后拿到的是字符串形式的原始JSON。
  • 无法直接取到第一个test1值的原因:标准JSON规范不允许同层级出现重复键,Python内置的json.loads默认会直接覆盖同键名的值,最终只保留最后一个出现的test1的取值。

解决方案

通过自定义JSON解析钩子保留重复键的所有取值,示例代码如下:

import json
import requests

r = requests.get('test.com')
x = r.json()

# 自定义解析钩子,重复键对应的值存储为列表,按出现顺序排列
def keep_duplicate_keys(pairs):
    data = {}
    for k, v in pairs:
        if k not in data:
            data[k] = v
        else:
            # 首次遇到重复键时将原有值转为列表
            if not isinstance(data[k], list):
                data[k] = [data[k]]
            data[k].append(v)
    return data

# 解析字符串形式的JSON
parsed = json.loads(x, object_pairs_hook=keep_duplicate_keys)

# 提取第一个test1的值
first_test1_val = parsed['test1'][0] if isinstance(parsed['test1'], list) else parsed['test1']
print(first_test1_val)

运行上述代码后first_test1_val的取值就是你需要的858。如果需要遍历所有键值对,直接遍历parsed对象即可,无重复的键对应单值,有重复的键对应按出现顺序存储的列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 07:30:04