基于JSON路径的REST API用户数据通用提取方案健壮性优化问询
通用REST API用户数据解析方案需求与实现挑战
我正在推进一个项目,需要调用多种REST API,这些API的返回格式各不相同,但都包含用户核心信息(姓名、邮箱、状态等)。项目核心目标是实现一套可解析任意API响应并提取指定用户数据的方案,输入为「响应字段与目标字段的映射关系」。
目前计划采用Python的jsonpath-ng包,通过指定JSON路径提取数据,但面临的核心挑战是如何让代码具备健壮性,能够适配任意结构的JSON响应。
示例API响应
Response 1
{ "data": [ { "type": "users", "id": "123", "attributes": { "name": "Test user", "handle": "abc.user@test.com", "created_at": "2021-03-29T01:30:16.346678+00:00", "modified_at": "2023-10-28T00:59:36.404897+00:00", "email": "abc.user@test.com", "icon": "https://test.com", "title": "", "verified": true, "service_account": false, "disabled": false, "allowed_login_methods": [], "status": "Active", "mfa_enabled": false } } ] }
Response 2
{ "data": { "userFunctionalPermissions": [ { "userName": "aaa_test1", "status": "Active", "functionalPermissions": [ { "functionalPermission": "Index.AgreeMismatch", "directAssociation": true, "assignedViafunctionalPermissionRole": [] } ] } ] } }
映射规则示例
映射关系以JSON格式定义,键为目标字段名,值为响应中的JSON路径。例如:
{"email": "attributes.email", "status": "status"}
初步实现步骤
- 获取数据数组:针对不同API的结构,先定位到包含用户信息的数组节点
from jsonpath_ng import parse # 针对Response 2的示例代码 query = parse("data.userFunctionalPermissions[*]") for match in query.find(Response2_json): print(match.value) - 基于定位到的用户节点,使用JSON路径提取指定字段:遍历映射规则,对每个目标字段执行对应的JSON路径查询,提取值并组装成统一格式的用户数据。
内容的提问来源于stack exchange,提问作者Suhail
相关产品推荐
相关产品推荐

