嵌套JSON提取首次出现的键值对报错,求正确获取首个eid值方法
解决JSON提取eid的TypeError问题
我来帮你搞定这个问题,你遇到的错误主要出在两个地方:索引顺序搞反了,还有不小心把字典转成字符串导致没法用键索引取值。
错误原因拆解
- 先看你的JSON结构:
"search-results"下面的"entry"是数组(列表)类型,所以得先拿到entry这个列表,再取它的第一个元素(索引0),而不是反过来先写[0]再找entry。 - 其次,你用了
json.dumps()把resp.json()返回的字典转换成了字符串。字符串只能用整数索引(比如取某个位置的字符),自然会触发TypeError: string indices must be integers这个错误。
正确的提取代码
你根本不需要用 json.dumps() 来格式化输出(除非只是为了打印看结构),直接用 resp.json() 返回的字典就行:
# 直接获取响应的字典格式结果,不要转成字符串 results = resp.json() # 按照正确的层级路径提取第一个eid myvar = results['search-results']['entry'][0]['eid'] print(myvar)
这段代码会输出你想要的结果:10-s2.0-60103485
额外说明
如果你只是想打印格式化后的JSON结构方便查看,可以分开操作,不要把格式化后的字符串用来做数据提取:
import json # 获取字典格式的结果用于数据提取 results_dict = resp.json() # 格式化打印JSON结构(这一步仅用于辅助查看,不影响提取逻辑) print(json.dumps(results_dict, sort_keys=True, indent=4, separators=(',', ': '))) # 提取第一个eid myvar = results_dict['search-results']['entry'][0]['eid'] print(myvar)
这样既可以清晰查看JSON结构,又能正确提取到目标数据啦。
内容的提问来源于stack exchange,提问作者K.S
相关产品推荐
相关产品推荐

