0

我需要使用 jolt 框架删除 json 消息中的重复项,并将唯一的被保险人 ID 和被保险人名称分别复制到名称代码和名称,我已经删除了带有被保险人 ID 的重复项,但我不知道如何复制相应的被保险人名称。 .

输入:

[
  {
    "aircraftId": "ILTA",
    "aircraftTypeCode": "",
    "insuredId": "12020671",
    "insuredName": "Samuel Antony",
    "policyReference": "20081238",
    "uwy": "2017"
  },
  {
    "aircraftId": "ILTA",
    "aircraftTypeCode": "",
    "insuredId": "12020671",
    "insuredName": "Samuel Antony",
    "policyReference": "20081238",
    "uwy": "2017"
  },
  {
    "aircraftId": "ADE",
    "aircraftTypeCode": "",
    "insuredId": "12018832",
    "insuredName": "Mark henry",
    "policyReference": "20082780",
    "uwy": "2017"
  }
]

颠簸规格:

[
  {
    "operation": "shift",
    "spec": {
      "*": { 
        "insuredId": { 
          "*": "ids.&[]"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "ids": {
        "*": {
          "$": "[#2].nameCode" 
        }
      }
    }
  }
]

实际输出:

[
  {
    "nameCode": "12020671"
  },
  {
    "nameCode": "12018832"
  }
]

预期输出:

[
  {
    "nameCode": "12020671",
    "name":"Samuel Antony"
  },
  {
    "nameCode": "12018832",
    "name":"Mark henry"
  }
]

更新的规范(需要验证):

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "insuredId": {
          "*": "ids.&[]"
        },
        "insuredName": {
          "*": "insuredNames.&[]"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "ids": {
        "*": {
          "$": "[#2].nameCode"
        }
      },
      "insuredNames": {
        "*": {
          "$": "[#2].name"
        }
      }
    }
  }
]
4

2 回答 2

0

您可以使用四次连续班次变换。在第一步中单独选择每个所需的键,以便为每个键获取两个列表。在第二步中使元素在每个列表中都是唯一的。在这一步中,我们有两个带有键的对象。然后再次将它们转换为列表。并根据每个列表中的索引将它们分组到没有键的对象中,例如

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "insuredId": "&",
        "insuredName": "&"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": "&2.&"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "$": "&2"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": "[&].&1"
      }
    }
  }
]
于 2021-07-14T11:01:36.420 回答
0
[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "insuredId": {
          "*": {
            "@(2,insuredName)": "ids.&[]"
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "ids": {
        "*": {
          "$": "[#2].nameCode",
          "*": "[#2].name"
        }
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "name": "=firstElement(@(1,name))"
      }
    }
  }
]

解释。

第一次操作:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "insuredId": {
          "*": {
            "@(2,insuredName)": "ids.&[]"
          }
        }
      }
    }
  }
]

它收集以“insuredId”为键的地图和“insuredName”列表作为值:

{
  "ids" : {
    "12020671" : [ "Samuel Antony", "Samuel Antony" ],
    "12018832" : [ "Mark henry" ]
  }
}

第二次操作:

[
  {
    "operation": "shift",
    "spec": {
      "ids": {
        "*": {
          "$": "[#2].nameCode",
          "*": "[#2].name"
        }
      }
    }
  }
]

它将 map 转换为简单的对列表:

[ {
  "nameCode" : "12018832",
  "name" : "Mark henry"
}, {
  "nameCode" : "12020671",
  "name" : [ "Samuel Antony", "Samuel Antony" ]
} ]

第三次操作:

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "name": "=firstElement(@(1,name))"
      }
    }
  }
]

它需要包含名称的数组的第一个元素:

[ {
  "nameCode" : "12018832",
  "name" : "Mark henry"
}, {
  "nameCode" : "12020671",
  "name" : "Samuel Antony"
} ]
于 2017-11-07T10:06:01.037 回答