Api Connect v10 使用 foreach 或类似方法将带有对象数组的 json 消息映射到对象(映射策略)

问题描述 投票:0回答:2

我是 API Connect 新手,无法找到从对象数组传递到对象并评估其内容的正确映射。 我解释一下:

我有一个像这样的json输入:

{
"methodCall": {
    "methodName": {
        "$": "ThisIsTheMethodName"
    },
    "params": {
        "param": {
            "value": {
                "array": {
                    "data": {
                        "value": {
                            "struct": {
                                "member": [
                                    {
                                        "name": {
                                            "$": "message"
                                        },
                                        "value": {
                                            "string": {
                                                "$": "Some text to send to client"
                                            }
                                        }
                                    },
                                    {
                                        "name": {
                                            "$": "phone"
                                        },
                                        "value": {
                                            "string": {
                                                "$": "9876543120124"
                                            }
                                        }
                                    },
                                    {
                                        "name": {
                                            "$": "date"
                                        },
                                        "value": {
                                            "string": {}
                                        }
                                    },
                                    {
                                        "name": {
                                            "$": "appid"
                                        },
                                        "value": {
                                            "string": {
                                                "$": "Application Identificator"
                                            }
                                        }
                                    },
                                    {
                                        "name": {
                                            "$": "costCenter"
                                        },
                                        "value": {
                                            "string": {
                                                "$": "102030"
                                            }
                                        }
                                    },
                                    {
                                        "name": {
                                            "$": "filled"
                                        },
                                        "value": {
                                            "string": {
                                                "$": "filledString"
                                            }
                                        }
                                    }
                                ]
                            }
                        }
                    }
                }
            }
        }
    }
}

}

我需要从映射生成这个 json 输出:

{
"phoneNumberSMS":"983849780",

"message":"Some text to send to client",

"date": "2022-10-04T15:30:00",

"appId":"Application Identificator",

"costCenter":"102030",

"filled":"filledString" }

我尝试过以下配置,但没有成功:

在 YAML 上

  actions:
- set: output.phoneNumberSMS
  foreach: input.methodCall.params.param.value.array.data.value.struct.member.value.string            
  from:
    - input.methodCall.params.param.value.array.data.value.struct.member.name.$
    - input.methodCall.params.param.value.array.data.value.struct.member.value.string.$
  values: |- 
    var retValue1 = '';

    if($(input.methodCall.params.param.value.array.data.value.struct.member.name.$) == 'phone'){
      retValue1=input.methodCall.params.param.value.array.data.value.struct.member.value.string.$;
    }

    retValue1;

我感谢你的帮助!!

mapping apiconnect
2个回答
1
投票

我在映射的两个阶段解决了这个问题:

two

  1. 创建一个名为members的数组,其中每个节点都是member类型,具有name和value属性。 这个“成员”数组是来自请求的数据的接收者。

enter image description here

  1. 在映射的第二阶段,我从先前的映射(类型成员)中获取输出变量并将其分配给 message.body。 这样做的目的是去掉带有美元符号 ($) 的字段名称,这样映射就不会因为无法识别它而给出任何错误。

enter image description here

enter image description here


0
投票

我已经从 IBM 官方文档中实现了这一点。

- map:
      title: Array
      inputs:
        input:
          schema:
            type: array
          variable: request.body.yourarrayname
      outputs:
        output_array:
          schema:
            type: array
          variable: message.body.yourarrayname
      actions:
        - create: yourarrayname
          from: yourarrayname
          foreach: yourarrayname
          actions:
            - set: array_object_name
              from: array_object_name                          # inside the actions section, variables inside the array elements being iterated over are used
      
© www.soinside.com 2019 - 2024. All rights reserved.