如何按条件合并JSON块并在后续请求中传递合并结果
解决JSON筛选重组时无法合并多个符合条件项的问题
需求说明
从接口响应的JSON中完成以下操作:
- 筛选出
IsMandatory为true的Extras项 - 提取每个符合条件项的第一个Option信息
- 重组为指定格式的JSON,保存为变量供后续请求使用
当前问题:仅能处理第一个符合条件的JSON块,无法将多个符合条件的项合并到结果数组中。
输入示例JSON片段
"Extras": [ { "ExtraId": "528", "IsMandatory": true, "Options": [ { "OptionId": "712", "NetCost": { "Amount": 22.0, "Currency": "EUR" } }, { "OptionId": "713", "NetCost": { "Amount": 34.0, "Currency": "EUR" } } ] }, { "ExtraId": "529", "IsMandatory": true, "Options": [ { "OptionId": "714", "NetCost": { "Amount": 20.0, "Currency": "EUR" } }, { "OptionId": "715", "NetCost": { "Amount": 32.0, "Currency": "EUR" } } ] }, { "ExtraId": "530", "IsMandatory": false, "Options": [ { "OptionId": "716", "NetCost": { "Amount": 22.0, "Currency": "EUR" } }, { "OptionId": "717", "NetCost": { "Amount": 34.0, "Currency": "EUR" } } ] } ]
期望输出JSON
"Extras": [ { "ExtraId": "528", "OptionId": "712", "ExpectedNetCost": { "Amount": 22.0, "Currency": "EUR" } }, { "ExtraId": "529", "OptionId": "714", "ExpectedNetCost": { "Amount": 20.0, "Currency": "EUR" } } ]
解决方案(JavaScript示例,适用于Postman等接口工具)
核心逻辑:遍历所有Extras项,筛选符合条件的项并逐个处理,最终收集为结果数组。
// 假设接口响应已解析为responseData变量 const responseData = { /* 完整响应JSON内容 */ }; const processedExtras = []; // 遍历所有Extras项 responseData.Extras.forEach(extra => { // 筛选IsMandatory为true的项 if (extra.IsMandatory) { const firstOption = extra.Options[0]; // 重组为目标格式并推入结果数组 processedExtras.push({ ExtraId: extra.ExtraId, OptionId: firstOption.OptionId, ExpectedNetCost: firstOption.NetCost }); } }); // 最终结果,可直接作为后续请求的请求体 const requestBody = { Extras: processedExtras };
解决方案(Python示例)
import json # 假设已获取接口响应的JSON字符串 response_json_str = ''' { "Extras": [/* 输入示例中的Extras数组内容 */] } ''' response_data = json.loads(response_json_str) processed_extras = [] for extra in response_data['Extras']: if extra['IsMandatory']: first_option = extra['Options'][0] processed_extras.append({ 'ExtraId': extra['ExtraId'], 'OptionId': first_option['OptionId'], 'ExpectedNetCost': first_option['NetCost'] }) # 生成目标请求体 request_body = {'Extras': processed_extras} # 若需要转为JSON字符串,执行:json.dumps(request_body, indent=2)
关键说明
问题根源:之前的代码可能仅处理了第一个符合条件的项(比如使用find而非遍历,或仅取数组首个元素),未完成全量遍历与结果收集。通过遍历+筛选+逐个处理+数组收集的逻辑,可确保所有符合要求的项都被整合到结果中。
内容的提问来源于stack exchange,提问作者KeshavKumar
相关产品推荐
相关产品推荐

