You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按条件合并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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 17:52:47