如何使用Azure APIM策略合并JSON负载中的多值字段
Azure APIM JSON负载转换问题解决
问题概述
需要将输入的JSON负载转换为指定结构,核心需求是合并insurer_info中的first和last字段为fullname,同时调整字段名称映射。
当前负载
{ "insurance_id": "2112", "insurer_info": { "first": "Tony", "last": "Stark" } }
预期负载
{ "id": "2112", "insurer_name": { "fullname": "Tony Stark" } }
原代码错误点
- 未定义变量
dependentee,应该使用已创建的insurerName变量 - 姓名合并逻辑错误:
body["insurer_info"]["first"]["last"]是错误的嵌套访问方式,需分别获取first和last的值再拼接 - 字段名不匹配:预期负载中键为
insurer_name,原代码用了insurerName,需保持一致
修正后的APIM策略代码
<policies> <inbound> <base /> <return-response> <set-status code="200" reason="ok" /> <set-header name="Content-Type" exists-action="override"> <value>application/json</value> </set-header> <set-body>@{ var body = context.Request.Body.As<JObject>(true); var transformedBody = new JObject(); // 映射insurance_id到id字段 transformedBody["id"] = body["insurance_id"]; // 创建insurer_name对象并拼接全名 var insurerName = new JObject(); insurerName["fullname"] = $"{body["insurer_info"]["first"]} {body["insurer_info"]["last"]}"; transformedBody["insurer_name"] = insurerName; return transformedBody.ToString(); }</set-body> </return-response> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies>
关键修正说明
- 变量名修正:替换错误的
dependentee为已声明的insurerName变量 - 姓名拼接:使用字符串插值
$"{first} {last}",正确获取insurer_info下的两个独立字段值并合并 - 字段名对齐:将
transformedBody["insurerName"]改为transformedBody["insurer_name"],与预期负载的键名完全匹配
内容的提问来源于stack exchange,提问作者jkhanbanner
相关产品推荐
相关产品推荐

