如何从多层级JSON对象中提取数据?附示例
嘿,我来帮你搞定这个多层级JSON的数据提取!首先得提一句,你贴的这个格式有点像JSON但不是标准的——标准JSON里键值对用冒号:分隔,元素之间用逗号,,所有键和字符串值都要加双引号。我先把它转成标准JSON格式方便后续操作:
{ "geometry": { "location": { "lat": "51.5194133", "lng": "-0.1269566" } }, "id": "ad6aaec7b7b0fa2c97a127c24845d76135e760ae", "place_id": "ChIJB9OTMDIbdkgRp0JWbQGZsS8", "reference": "CmRRAAAAiC-ErdlAvz74Drejj2mAAh6Plr46e889a3Uv6CrRXFqNtVatoFsOTarDH0KU8KCkWoN--QGv01RSjLBZblbrAHNPGDVdiXikedid0vKMVM_LQtXstrSQFt4s-Z-Wi-1AEhDJRWc9bdWpKHPPOrt7QGTqGhSJgMPENn_wSGbprGYLv52csv5BtQ" }
下面我用两种最常用的语言举例子,教你怎么提取需要的数据:
1. Python 提取方法
Python里我们用内置的json模块先把JSON字符串解析成字典,然后通过键名逐层访问就行:
import json # 把上面的标准JSON存成字符串 json_str = ''' { "geometry": { "location": { "lat": "51.5194133", "lng": "-0.1269566" } }, "id": "ad6aaec7b7b0fa2c97a127c24845d76135e760ae", "place_id": "ChIJB9OTMDIbdkgRp0JWbQGZsS8", "reference": "CmRRAAAAiC-ErdlAvz74Drejj2mAAh6Plr46e889a3Uv6CrRXFqNtVatoFsOTarDH0KU8KCkWoN--QGv01RSjLBZblbrAHNPGDVdiXikedid0vKMVM_LQtXstrSQFt4s-Z-Wi-1AEhDJRWc9bdWpKHPPOrt7QGTqGhSJgMPENn_wSGbprGYLv52csv5BtQ" } ''' # 解析成Python字典 data = json.loads(json_str)
- 提取顶级字段(比如
place_id、id):
# 直接通过键名访问 place_id = data["place_id"] id_value = data["id"] # 怕键不存在报错?用get方法加默认值更安全 place_id_safe = data.get("place_id", "未获取到place_id")
- 提取嵌套的经纬度:
# 逐层访问嵌套的键 lat = data["geometry"]["location"]["lat"] lng = data["geometry"]["location"]["lng"] # 同样用get做安全处理,避免某一层不存在导致报错 lat_safe = data.get("geometry", {}).get("location", {}).get("lat", "未知纬度")
2. JavaScript 提取方法
JavaScript里用JSON.parse()把JSON字符串转成对象,然后通过点语法或者方括号语法访问:
// 标准JSON字符串 const jsonStr = `{ "geometry": { "location": { "lat": "51.5194133", "lng": "-0.1269566" } }, "id": "ad6aaec7b7b0fa2c97a127c24845d76135e760ae", "place_id": "ChIJB9OTMDIbdkgRp0JWbQGZsS8", "reference": "CmRRAAAAiC-ErdlAvz74Drejj2mAAh6Plr46e889a3Uv6CrRXFqNtVatoFsOTarDH0KU8KCkWoN--QGv01RSjLBZblbrAHNPGDVdiXikedid0vKMVM_LQtXstrSQFt4s-Z-Wi-1AEhDJRWc9bdWpKHPPOrt7QGTqGhSJgMPENn_wSGbprGYLv52csv5BtQ" }`; // 解析成JavaScript对象 const data = JSON.parse(jsonStr);
- 提取顶级字段:
// 点语法更直观 const placeId = data.place_id; const idValue = data.id; // 也可以用方括号语法:data["place_id"]
- 提取嵌套的经纬度:
// 逐层点访问 const lat = data.geometry.location.lat; const lng = data.geometry.location.lng; // 怕某一层不存在?用ES2020+的可选链操作符,再加空值合并运算符设默认值 const latSafe = data?.geometry?.location?.lat ?? "未知纬度";
小提示
如果你的原始数据就是那种用=和;的非标准格式,得先转换成标准JSON才能用上面的方法:比如把所有=替换成:,;替换成,,给没加引号的键(比如id、geometry)补上双引号。
内容的提问来源于stack exchange,提问作者MasterDNE
相关产品推荐
相关产品推荐

