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
相关产品推荐
相关产品推荐

