基于ID匹配条件合并JSON并生成PATCH/POST请求的需求实现
实现基于ID存在性生成PATCH/POST请求的方案
需求说明
根据两个输入数据集生成请求:
- 若ID在Input1中存在,使用
PATCH方法 - 若ID在Input1中不存在,使用
POST方法 - 同一ID的所有value值需合并,用分号(
;)分隔
输入数据
Input1
{ "prod": [ { "Id": "123456", "value": "ABC" }, { "Id": "123456", "value": "DEF" }, { "Id": "987654", "value": "DEF" } ] }
Input2
{ "ProdInfo": { "Prod": [ { "Id": "123456", "value1": "LMN" }, { "Id": "123456", "value1": "OPQ" }, { "Id": "654321", "value1": "OPQ" } ] } }
实现代码(Python)
import json from collections import defaultdict # 解析输入数据 input1 = json.loads('''{ "prod": [ { "Id": "123456", "value": "ABC" }, { "Id": "123456", "value": "DEF" }, { "Id": "987654", "value": "DEF" } ] }''') input2 = json.loads('''{ "ProdInfo": { "Prod": [ { "Id": "123456", "value1": "LMN" }, { "Id": "123456", "value1": "OPQ" }, { "Id": "654321", "value1": "OPQ" } ] } } ''') # 收集Input1中的ID及对应value id_values = defaultdict(list) input1_ids = set() for item in input1['prod']: id_val = item['Id'] input1_ids.add(id_val) id_values[id_val].append(item['value']) # 合并Input2中的value1到对应ID for item in input2['ProdInfo']['Prod']: id_val = item['Id'] id_values[id_val].append(item['value1']) # 生成请求列表(仅保留Input2涉及的ID) requests = [] target_ids = {item['Id'] for item in input2['ProdInfo']['Prod']} for id_val, values in id_values.items(): if id_val not in target_ids: continue method = 'PATCH' if id_val in input1_ids else 'POST' requests.append({ "method": method, "body": { "ID": id_val, "Value": ';'.join(values) } }) # 构建最终输出结构 output = { "output": [ { "Request": requests } ] } # 打印结果 print(json.dumps(output, indent=2))
输出结果
{ "output": [ { "Request": [ { "method": "PATCH", "body": { "ID": "123456", "Value": "ABC;DEF;LMN;OPQ" } }, { "method": "POST", "body": { "ID": "654321", "Value": "OPQ" } } ] } ] }
说明
- 代码过滤了Input1中存在但Input2未涉及的ID(如987654),与期望输出保持一致
- 用
defaultdict高效收集同一ID的所有value值,再通过分号拼接成字符串 - 借助集合快速判断ID是否存在于Input1中,以此确定请求方法
内容的提问来源于stack exchange,提问作者user21364983
相关产品推荐
相关产品推荐

