如何使用Python通过键在JSON响应/文件中提取并显示特定值
Python提取JSON特定值的解决方案
嘿,这事儿不难!我给你一步步拆解怎么用Python从这份JSON响应里提取你想要的特定值:
1. 先把JSON转为Python字典
不管你是通过requests库爬取到的响应,还是手里已经有JSON格式的字符串,第一步都要把它转换成Python能直接操作的字典对象:
情况1:用requests获取的响应
import requests # 替换成你实际请求的URL response = requests.get("https://your-target-url.com") # 直接将响应转为字典 data = response.json()
情况2:已有JSON字符串
import json # 你的完整JSON字符串 json_str = '''{ "term":"albany", "moresuggestions":490, "autoSuggestInstance":null, "suggestions":[{ "group":"CITY_GROUP", "entities":[{ "geoId":"1000000000000000355", "destinationId":"1508137", "landmarkCityDestinationId":null, "type":"CITY", "caption":"<span class='highlighted'>Albany</span>, Albany County, United States of America", "redirectPage":"DEFAULT_PAGE", "latitude":42.650249, "longitude":-73.753578 }] }] }''' # 字符串转字典 data = json.loads(json_str)
2. 提取顶层键值
对于term、moresuggestions这种顶层的键,直接通过字典键访问就行:
# 获取搜索词term term = data["term"] print(term) # 输出: albany # 获取更多建议数量 more_suggestions = data["moresuggestions"] print(more_suggestions) # 输出: 490
3. 提取嵌套结构的值
JSON里有嵌套的列表(比如suggestions)和字典,需要结合索引(列表用下标)和键(字典用键名)来逐层访问:
# 获取第一个建议分组的名称 first_suggestion_group = data["suggestions"][0]["group"] print(first_suggestion_group) # 输出: CITY_GROUP # 获取第一个建议里第一个城市的经纬度 city_lat = data["suggestions"][0]["entities"][0]["latitude"] city_lng = data["suggestions"][0]["entities"][0]["longitude"] print(f"纬度: {city_lat}, 经度: {city_lng}") # 输出: 纬度: 42.650249, 经度: -73.753578
4. 处理HTML转义内容
注意到caption里有<这种HTML转义字符,想要转成正常的HTML格式,可以用html模块的unescape方法:
import html raw_caption = data["suggestions"][0]["entities"][0]["caption"] clean_caption = html.unescape(raw_caption) print(clean_caption) # 输出: <span class='highlighted'>Albany</span>, Albany County, United States of America
5. 安全提取(避免KeyError)
如果不确定某个键是否存在,直接用[]访问会抛出KeyError,推荐用get()方法,还能设置默认值:
# 安全获取顶层键,不存在则返回默认值 auto_suggest = data.get("autoSuggestInstance", "无数据") print(auto_suggest) # 输出: None # 多层嵌套的安全获取,逐层用get避免报错 destination_id = data.get("suggestions", [{}])[0].get("entities", [{}])[0].get("destinationId", "未找到ID") print(destination_id) # 输出: 1508137
内容的提问来源于stack exchange,提问作者radix
相关产品推荐
相关产品推荐

