Python JSON解码缺失值:REST请求日志遍历仅获键名问题排查
问题分析与解决
嘿,我马上帮你理清这个问题!你遇到的情况其实是对Python字典遍历逻辑的小误解,咱们一步步拆解:
问题根源
你看到print(request["request"]["input"])输出的是{text:sample string} {text:fake string} ...,这说明request["request"]["input"]本质是一个字典(dict),而不是列表(list)。在Python里,直接遍历字典(比如for z in 字典对象)时,默认只会遍历字典的键(keys),所以你循环里打印的z其实就是字典的键"text",而不是对应的值。
验证方法
你可以先加一行代码确认它的类型:
r = requests.get(url, auth=(a, b)) parsed = json.loads(r.content) for request in parsed['logs']: input_data = request["request"]["input"] print(type(input_data)) # 会输出 <class 'dict'>,确认是字典
解决代码
根据你的需求,有两种常用的修改方式:
1. 同时获取键和值
如果想同时输出键(比如"text")和对应的值(比如"sample string"),可以用字典的.items()方法:
r = requests.get(url, auth=(a, b)) parsed = json.loads(r.content) for request in parsed['logs']: input_dict = request["request"]["input"] for key, value in input_dict.items(): print(f"{key}: {value}") # 输出类似 text: sample string
2. 只获取值
如果只需要输出对应的值(比如"sample string"),就用.values()方法:
r = requests.get(url, auth=(a, b)) parsed = json.loads(r.content) for request in parsed['logs']: input_dict = request["request"]["input"] for value in input_dict.values(): print(value) # 直接输出 sample string、fake string 等
这样就能得到你想要的内容啦!
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

