如何从API返回的JSON中提取含指定键值对的对象?
提取API返回JSON中包含指定值的对象
问题描述
我有一个API返回的JSON响应,结构如下(已修正原JSON的语法错误):
{ "get_result_by_result_id": [ { "data": { "date_trunc": "2022-09-06T00:00:00+00:00", "project": "Smoothy Finance", "usd_volume": 42307.09145419092 } }, { "data": { "date_trunc": "2022-09-30T00:00:00+00:00", "project": "curve", "usd_volume": 40548.688138892685 } }, { "data": { "date_trunc": "2022-09-14T00:00:00+00:00", "project": " kyber", "usd_volume": 13800038.727002844 } } ] }
需要从中提取所有project值包含"kyber"的对象,输出目标格式如下:
{ "common_objects": [ { "data": { "date_trunc": "2022-09-14T00:00:00+00:00", "project": " kyber", "usd_volume": 13800038.727002844 } }, { "data": { "date_trunc": "2022-09-07T00:00:00+00:00", "project": " kyber", "usd_volume": 24518356.073168807 } } ] }
解决方案
JavaScript实现
利用数组filter方法筛选符合条件的元素,再构造目标结构:
// 解析后的API响应对象 const apiResponse = { "get_result_by_result_id": [ { "data": { "date_trunc": "2022-09-06T00:00:00+00:00", "project": "Smoothy Finance", "usd_volume": 42307.09145419092 } }, { "data": { "date_trunc": "2022-09-30T00:00:00+00:00", "project": "curve", "usd_volume": 40548.688138892685 } }, { "data": { "date_trunc": "2022-09-14T00:00:00+00:00", "project": " kyber", "usd_volume": 13800038.727002844 } } ] }; // 筛选project包含"kyber"的项 const kyberObjects = apiResponse.get_result_by_result_id.filter(item => item.data.project.includes("kyber") ); // 构造并输出目标格式 const result = { "common_objects": kyberObjects }; console.log(JSON.stringify(result, null, 2));
Python实现
通过列表推导式筛选元素,再构造字典输出:
import json # 解析后的API响应字典 api_response = { "get_result_by_result_id": [ { "data": { "date_trunc": "2022-09-06T00:00:00+00:00", "project": "Smoothy Finance", "usd_volume": 42307.09145419092 } }, { "data": { "date_trunc": "2022-09-30T00:00:00+00:00", "project": "curve", "usd_volume": 40548.688138892685 } }, { "data": { "date_trunc": "2022-09-14T00:00:00+00:00", "project": " kyber", "usd_volume": 13800038.727002844 } } ] } # 筛选project包含"kyber"的项 kyber_objects = [ item for item in api_response["get_result_by_result_id"] if "kyber" in item["data"]["project"] ] # 构造并输出目标格式 result = { "common_objects": kyber_objects } print(json.dumps(result, indent=2))
额外说明
- 原JSON存在多余逗号,需先修正为合法JSON才能正常解析;
- 若需严格匹配
project值(忽略前后空格),可使用trim()(JS)或strip()(Python)处理后再判断; - 若需不区分大小写匹配,可将字符串转为小写后再判断,例如:
- JS:
item.data.project.toLowerCase().includes("kyber") - Python:
"kyber" in item["data"]["project"].lower()
- JS:
内容的提问来源于stack exchange,提问作者ren
相关产品推荐
相关产品推荐

