0

如前所述,有没有办法组合以下有效负载。我们希望根据“uniqueID”将payload2中的“地址”放入payload1.errors中,并更新“result”值。如果payload2在payload1.errors中有没有对应uniqueID的对象,输出仍然应该有带有地址字段和uniqueID的对象,例如payload2中的uniqueID = 4。

payload1.errors 中的字段将是 payload2 中除“地址”字段之外的字段的子集。

请注意:这些只是示例,实际有效负载有 10 多个对象和每个对象的 50 多个字段。

有效载荷1:

 {
  "metadata": {
    "SchoolName": "ABC High School",
    "quarter": "2021 Q4",
    "ID": "4sdfsdd-esdf-esad1-8asfs7"
  },
  "result": "data-validation-error",
  "errors": [
    {
      "uniqueID": "1",
      "standard": "Must Be Equal to V",
      "marks": "Must Be Equal to 90+",
      "rollNumber": "Must Be Between 1 and 10"
    },
    {
      "uniqueID": "2",
      "standard": "Must Be Equal to VI",
      "marks": "Must Be Equal to 80+",
      "rollNumber": "Must Be Between 10 and 20"
    },
    {
      "uniqueID": "3",
      "standard": "Must Be Equal to VII",
      "marks": "Must Be Equal to 85+",
      "rollNumber": "Must Be Between 30 and 40"
    },
    {
      "uniqueID": "5",
      "standard": "Must Be Equal to XI",
      "marks": "Must Be Equal to 90+",
      "rollNumber": "Must Be Between 50 and 60"
    }
  ]
}

第二个有效载荷是:

有效载荷2:

[
  {
    "uniqueID": "1",
    "address": "bcod4001c",
    "admissionDate": "2025-03-28",
    "parentDetails": "N/A",
    "standard": "VIII",
    "marks": "80",
    "rollNumber": "14"
    
  },
  {
    "uniqueID": "2",
    "address": "bhoe4001d",
    "admissionDate": "2021-04-21",
    "parentDetails": "N/A",
    "standard": "IX",
    "marks": "76",
    "rollNumber": "4"
  },
  {
    "uniqueID": "3",
    "address": "bmor4001e",
    "admissionDate": "2021-03-28",
    "parentDetails": "N/A",
    "standard": "IV",
    "marks": "75",
    "rollNumber": "9"
  },
  {
    "uniqueID": "4",
    "address": "bmor7001f",
    "admissionDate": "2021-05-18",
    "parentDetails": "N/A",
    "standard": "X",
    "marks": "96",
    "rollNumber": "45"
  }
  
]

预期输出:

{
      "metadata": {
        "SchoolName": "ABC High School",
        "quarter": "2021 Q4",
        "ID": "4sdfsdd-esdf-esad1-8asfs7"
      },
      "result": "data-validation-error and address validation error",
      "errors": [
        {
          "uniqueID": "1",
          "standard": "Must Be Equal to V",
          "marks": "Must Be Equal to 90+",
          "rollNumber": "Must Be Between 1 and 10",
          "address": "bcod4001c is an invalid address"
        },
        {
          "uniqueID": "2",
          "standard": "Must Be Equal to VI",
          "marks": "Must Be Equal to 80+",
          "rollNumber": "Must Be Between 10 and 20",
          "address": "bhoe4001d is an invalid address"
        },
        {
          "uniqueID": "3",
          "standard": "Must Be Equal to VII",
          "marks": "Must Be Equal to 85+",
          "rollNumber": "Must Be Between 30 and 40",
          "address": "bmor4001e is an invalid address"
        },
        {
          "uniqueID": "4",
          "address": "bmor7001f is an invalid address"
        },
        {
          "uniqueID": "5",
          "standard": "Must Be Equal to XI",
          "marks": "Must Be Equal to 85+",
          "rollNumber": "Must Be Between 40 and 60"
        }
      ]
}
4

2 回答 2

2

您可以使用 update 仅转换错误,首先加入 payload2,然后根据需要映射每个结果项。

为了简单起见,我使用有效载荷 1 作为主要有效载荷并将有效载荷 2 放入 DataWeave 变量中。

%dw 2.0
output application/json
import * from dw::core::Arrays
import mergeWith from dw::core::Objects
fun getAddressError(address)=if (address != null) {address: address++ " is an invalid address" } else {}
var payload2= [
  {
    "uniqueID": "1",
    "address": "bcod4001c",
    "admissionDate": "2025-03-28",
    "parentDetails": "N/A",
    "standard": "VIII",
    "marks": "80",
    "rollNumber": "14"
    
  },
  {
    "uniqueID": "2",
    "address": "bhoe4001d",
    "admissionDate": "2021-04-21",
    "parentDetails": "N/A",
    "standard": "IX",
    "marks": "76",
    "rollNumber": "4"
  },
  {
    "uniqueID": "3",
    "address": "bmor4001e",
    "admissionDate": "2021-03-28",
    "parentDetails": "N/A",
    "standard": "IV",
    "marks": "75",
    "rollNumber": "9"
  },
  {
    "uniqueID": "4",
    "address": "bmor7001f",
    "admissionDate": "2021-05-18",
    "parentDetails": "N/A",
    "standard": "X",
    "marks": "96",
    "rollNumber": "45"
  } 
]
---
payload update {
        case errors at .errors ->
             outerJoin(payload2, errors, (error1) -> error1.uniqueID, (error2) -> error2.uniqueID)
               map (
                    if ($.r?) ($.r ++ getAddressError($.l.address) ) 
                    else {uniqueId: $.l.uniqueID, (getAddressError($.l.address))}
               ) 
}

输出:

{
  "metadata": {
    "SchoolName": "ABC High School",
    "quarter": "2021 Q4",
    "ID": "4sdfsdd-esdf-esad1-8asfs7"
  },
  "result": "data-validation-error",
  "errors": [
    {
      "uniqueID": "1",
      "standard": "Must Be Equal to V",
      "marks": "Must Be Equal to 90+",
      "rollNumber": "Must Be Between 1 and 10",
      "address": "bcod4001c is an invalid address"
    },
    {
      "uniqueID": "2",
      "standard": "Must Be Equal to VI",
      "marks": "Must Be Equal to 80+",
      "rollNumber": "Must Be Between 10 and 20",
      "address": "bhoe4001d is an invalid address"
    },
    {
      "uniqueID": "3",
      "standard": "Must Be Equal to VII",
      "marks": "Must Be Equal to 85+",
      "rollNumber": "Must Be Between 30 and 40",
      "address": "bmor4001e is an invalid address"
    },
    {
      "uniqueId": "4",
      "address": "bmor7001f is an invalid address"
    },
    {
      "uniqueID": "5",
      "standard": "Must Be Equal to XI",
      "marks": "Must Be Equal to 90+",
      "rollNumber": "Must Be Between 50 and 60"
    }
  ]
}
于 2022-01-22T16:21:07.857 回答
0

您可以使用 Concat 运算符 ++ 将它们组合链接:https ://docs.mulesoft.com/mule-runtime/3.9/dataweave-operators#concat

于 2022-01-22T12:50:13.800 回答