Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mule 使用Dataweave将记录合并到每个类别的单个JSON对象中_Mule_Aggregate_Flatten_Anypoint Studio_Dataweave - Fatal编程技术网

Mule 使用Dataweave将记录合并到每个类别的单个JSON对象中

Mule 使用Dataweave将记录合并到每个类别的单个JSON对象中,mule,aggregate,flatten,anypoint-studio,dataweave,Mule,Aggregate,Flatten,Anypoint Studio,Dataweave,我使用Anypoint Studio 6.1和Mule 3.8.1,在Dataweave中,我有一个CSV文件作为输入和JSON列表输出 CSV文件中有多条记录具有相同的产品类别Id,但与之关联的产品详细信息不同。我希望为这些记录中的每个记录汇总输出,因此每个产品类别Id都有一个对象,其中包含该产品类别Id下每个产品的产品详细信息列表。我如何做到这一点 电流输出: [ { "Products": { "ProductDetails": [ {

我使用Anypoint Studio 6.1和Mule 3.8.1,在Dataweave中,我有一个CSV文件作为输入和JSON列表输出

CSV文件中有多条记录具有相同的产品类别Id,但与之关联的产品详细信息不同。我希望为这些记录中的每个记录汇总输出,因此每个产品类别Id都有一个对象,其中包含该产品类别Id下每个产品的产品详细信息列表。我如何做到这一点

电流输出:

[
  {
    "Products": {
      "ProductDetails": [
        {
          "ProductDetail": {
            "ProductSubDetails": {
              "ProductAmount": 7.50,
              "ProductReplenFrequency": "monthly",
              "ProductsNotes": "Product Notes 1",
              "pick": false
            },
            "ProductType": "PS4 Game"
          },
          "ProductSubType": "Game"
        }
      ]
    },
    "ProductsCategoryId": "ProductS001",
    "ProductSubType": "Computers and Games"
  },
  {
    "Products": {
      "ProductDetails": [
        {
          "ProductDetail": {
            "ProductSubDetails": {
              "ProductAmount": 7.50,
              "ProductReplenFrequency": "fortnightly",
              "ProductsNotes": "Products Notes 2",
              "pick": false
            },
            "ProductType": "X Box One Game"
          },
          "ProductSubType": "Game"
        }
      ]
    },
    "ProductsCategoryId": "ProductS001",
    "ProductSubType": "Computers and Games"
  }
]
[
  {
    "Products": {
      "ProductDetails": [
        {
          "ProductDetail": {
            "ProductSubDetails": {
              "ProductAmount": 7.50,
              "ProductReplenFrequency": "monthly",
              "ProductsNotes": "Product Notes 1",
              "pick": false
            },
            "ProductType": "PS4 Game"
          },
          "ProductSubType": "Game"
        },
        {
          "ProductDetail": {
            "ProductSubDetails": {
              "ProductAmount": 7.50,
              "ProductReplenFrequency": "fortnightly",
              "ProductsNotes": "Products Notes 2",
              "pick": false
            },
            "ProductType": "X Box One Game"
          },
          "ProductSubType": "Game"
        }       
      ]
    },
    "ProductsIdentifier": "ProductS001",
    "ProductSubType": "Computers and Games"
  }
]
%dw 1.0
%input payload application/csv
%output application/json skipNullOn = "everywhere" , encoding = "UTF-8"
%var dataLookup = {(payload."ProductsCategoryId" map {($.Id): $.Value})}

---
(payload filter $$ > 2) map ((payload01 , indexOfPayload01) -> {
    Products: {
        ProductsDetails: [{
            ProductsDetail: {
                ProductsubDetails: {
                    ProductsAmount: payload01."Products Amount" as :number,
                    ProductsFrequency: payload01."Products Frequency"
                },
                ProductsType: payload01."Products Type"
            }
        }]
    },
    ProductsCategoryId: payload01."ProductsCategoryId"
})
ProductsCategoryId,Product Type,Product  Frequency,Product Amount
ProductS001,PS4 Game,Monthly,7.5
ProductS001,X Box One Game,Fortnightly,7.5
ProductS002,Lego,Daily,7
预期输出:

[
  {
    "Products": {
      "ProductDetails": [
        {
          "ProductDetail": {
            "ProductSubDetails": {
              "ProductAmount": 7.50,
              "ProductReplenFrequency": "monthly",
              "ProductsNotes": "Product Notes 1",
              "pick": false
            },
            "ProductType": "PS4 Game"
          },
          "ProductSubType": "Game"
        }
      ]
    },
    "ProductsCategoryId": "ProductS001",
    "ProductSubType": "Computers and Games"
  },
  {
    "Products": {
      "ProductDetails": [
        {
          "ProductDetail": {
            "ProductSubDetails": {
              "ProductAmount": 7.50,
              "ProductReplenFrequency": "fortnightly",
              "ProductsNotes": "Products Notes 2",
              "pick": false
            },
            "ProductType": "X Box One Game"
          },
          "ProductSubType": "Game"
        }
      ]
    },
    "ProductsCategoryId": "ProductS001",
    "ProductSubType": "Computers and Games"
  }
]
[
  {
    "Products": {
      "ProductDetails": [
        {
          "ProductDetail": {
            "ProductSubDetails": {
              "ProductAmount": 7.50,
              "ProductReplenFrequency": "monthly",
              "ProductsNotes": "Product Notes 1",
              "pick": false
            },
            "ProductType": "PS4 Game"
          },
          "ProductSubType": "Game"
        },
        {
          "ProductDetail": {
            "ProductSubDetails": {
              "ProductAmount": 7.50,
              "ProductReplenFrequency": "fortnightly",
              "ProductsNotes": "Products Notes 2",
              "pick": false
            },
            "ProductType": "X Box One Game"
          },
          "ProductSubType": "Game"
        }       
      ]
    },
    "ProductsIdentifier": "ProductS001",
    "ProductSubType": "Computers and Games"
  }
]
%dw 1.0
%input payload application/csv
%output application/json skipNullOn = "everywhere" , encoding = "UTF-8"
%var dataLookup = {(payload."ProductsCategoryId" map {($.Id): $.Value})}

---
(payload filter $$ > 2) map ((payload01 , indexOfPayload01) -> {
    Products: {
        ProductsDetails: [{
            ProductsDetail: {
                ProductsubDetails: {
                    ProductsAmount: payload01."Products Amount" as :number,
                    ProductsFrequency: payload01."Products Frequency"
                },
                ProductsType: payload01."Products Type"
            }
        }]
    },
    ProductsCategoryId: payload01."ProductsCategoryId"
})
ProductsCategoryId,Product Type,Product  Frequency,Product Amount
ProductS001,PS4 Game,Monthly,7.5
ProductS001,X Box One Game,Fortnightly,7.5
ProductS002,Lego,Daily,7
数据编织代码:

[
  {
    "Products": {
      "ProductDetails": [
        {
          "ProductDetail": {
            "ProductSubDetails": {
              "ProductAmount": 7.50,
              "ProductReplenFrequency": "monthly",
              "ProductsNotes": "Product Notes 1",
              "pick": false
            },
            "ProductType": "PS4 Game"
          },
          "ProductSubType": "Game"
        }
      ]
    },
    "ProductsCategoryId": "ProductS001",
    "ProductSubType": "Computers and Games"
  },
  {
    "Products": {
      "ProductDetails": [
        {
          "ProductDetail": {
            "ProductSubDetails": {
              "ProductAmount": 7.50,
              "ProductReplenFrequency": "fortnightly",
              "ProductsNotes": "Products Notes 2",
              "pick": false
            },
            "ProductType": "X Box One Game"
          },
          "ProductSubType": "Game"
        }
      ]
    },
    "ProductsCategoryId": "ProductS001",
    "ProductSubType": "Computers and Games"
  }
]
[
  {
    "Products": {
      "ProductDetails": [
        {
          "ProductDetail": {
            "ProductSubDetails": {
              "ProductAmount": 7.50,
              "ProductReplenFrequency": "monthly",
              "ProductsNotes": "Product Notes 1",
              "pick": false
            },
            "ProductType": "PS4 Game"
          },
          "ProductSubType": "Game"
        },
        {
          "ProductDetail": {
            "ProductSubDetails": {
              "ProductAmount": 7.50,
              "ProductReplenFrequency": "fortnightly",
              "ProductsNotes": "Products Notes 2",
              "pick": false
            },
            "ProductType": "X Box One Game"
          },
          "ProductSubType": "Game"
        }       
      ]
    },
    "ProductsIdentifier": "ProductS001",
    "ProductSubType": "Computers and Games"
  }
]
%dw 1.0
%input payload application/csv
%output application/json skipNullOn = "everywhere" , encoding = "UTF-8"
%var dataLookup = {(payload."ProductsCategoryId" map {($.Id): $.Value})}

---
(payload filter $$ > 2) map ((payload01 , indexOfPayload01) -> {
    Products: {
        ProductsDetails: [{
            ProductsDetail: {
                ProductsubDetails: {
                    ProductsAmount: payload01."Products Amount" as :number,
                    ProductsFrequency: payload01."Products Frequency"
                },
                ProductsType: payload01."Products Type"
            }
        }]
    },
    ProductsCategoryId: payload01."ProductsCategoryId"
})
ProductsCategoryId,Product Type,Product  Frequency,Product Amount
ProductS001,PS4 Game,Monthly,7.5
ProductS001,X Box One Game,Fortnightly,7.5
ProductS002,Lego,Daily,7
样本数据:

[
  {
    "Products": {
      "ProductDetails": [
        {
          "ProductDetail": {
            "ProductSubDetails": {
              "ProductAmount": 7.50,
              "ProductReplenFrequency": "monthly",
              "ProductsNotes": "Product Notes 1",
              "pick": false
            },
            "ProductType": "PS4 Game"
          },
          "ProductSubType": "Game"
        }
      ]
    },
    "ProductsCategoryId": "ProductS001",
    "ProductSubType": "Computers and Games"
  },
  {
    "Products": {
      "ProductDetails": [
        {
          "ProductDetail": {
            "ProductSubDetails": {
              "ProductAmount": 7.50,
              "ProductReplenFrequency": "fortnightly",
              "ProductsNotes": "Products Notes 2",
              "pick": false
            },
            "ProductType": "X Box One Game"
          },
          "ProductSubType": "Game"
        }
      ]
    },
    "ProductsCategoryId": "ProductS001",
    "ProductSubType": "Computers and Games"
  }
]
[
  {
    "Products": {
      "ProductDetails": [
        {
          "ProductDetail": {
            "ProductSubDetails": {
              "ProductAmount": 7.50,
              "ProductReplenFrequency": "monthly",
              "ProductsNotes": "Product Notes 1",
              "pick": false
            },
            "ProductType": "PS4 Game"
          },
          "ProductSubType": "Game"
        },
        {
          "ProductDetail": {
            "ProductSubDetails": {
              "ProductAmount": 7.50,
              "ProductReplenFrequency": "fortnightly",
              "ProductsNotes": "Products Notes 2",
              "pick": false
            },
            "ProductType": "X Box One Game"
          },
          "ProductSubType": "Game"
        }       
      ]
    },
    "ProductsIdentifier": "ProductS001",
    "ProductSubType": "Computers and Games"
  }
]
%dw 1.0
%input payload application/csv
%output application/json skipNullOn = "everywhere" , encoding = "UTF-8"
%var dataLookup = {(payload."ProductsCategoryId" map {($.Id): $.Value})}

---
(payload filter $$ > 2) map ((payload01 , indexOfPayload01) -> {
    Products: {
        ProductsDetails: [{
            ProductsDetail: {
                ProductsubDetails: {
                    ProductsAmount: payload01."Products Amount" as :number,
                    ProductsFrequency: payload01."Products Frequency"
                },
                ProductsType: payload01."Products Type"
            }
        }]
    },
    ProductsCategoryId: payload01."ProductsCategoryId"
})
ProductsCategoryId,Product Type,Product  Frequency,Product Amount
ProductS001,PS4 Game,Monthly,7.5
ProductS001,X Box One Game,Fortnightly,7.5
ProductS002,Lego,Daily,7

谢谢

您必须使用查找来获得所需的输出。请参考以下答案了解更多详细信息

%dw 1.0
%input payload application/csv
%output application/json skipNullOn = "everywhere" , encoding = "UTF-8"
---
payload groupBy $.ProductsCategoryId map {
    Products: {
        ProductsDetails:   $ map (product , indexOfProduct) -> {
            ProductsDetail: {
                ProductsubDetails: {
                    ProductsAmount: product."Product Amount" as :number,
                    ProductsFrequency: product."Product Frequency"
                },
                ProductsType: product."Product Type"
            }
        }
    },
    ProductsCategoryId: $."ProductsCategoryId"[0]
}

根据评论更新答案

尝试以下映射。另外,我也不知道为什么要使用filter$$>2。 对于从第5行开始的正文,您可以添加输入读取器属性“BodyStartInNumber”,请参阅以了解更多详细信息

%dw 1.0
%input payload application/csv
%output application/json skipNullOn = "everywhere" , encoding = "UTF-8"
---
payload groupBy $.ProductsCategoryId map {
    Products: {
        ProductsDetails:   $ map (product , indexOfProduct) -> {
            ProductsDetail: {
                ProductsubDetails: {
                    ProductsAmount: product."Product Amount" as :number,
                    ProductsFrequency: product."Product Frequency"
                },
                ProductsType: product."Product Type"
            }
        }
    },
    ProductsCategoryId: $."ProductsCategoryId"[0]
}
额定输出:-

[
  {
    "Products": {
      "ProductsDetails": [
        {
          "ProductsDetail": {
            "ProductsubDetails": {
              "ProductsAmount": 7
            },
            "ProductsType": "Lego"
          }
        }
      ]
    },
    "ProductsCategoryId": "ProductS002"
  },
  {
    "Products": {
      "ProductsDetails": [
        {
          "ProductsDetail": {
            "ProductsubDetails": {
              "ProductsAmount": 7.5
            },
            "ProductsType": "PS4 Game"
          }
        },
        {
          "ProductsDetail": {
            "ProductsubDetails": {
              "ProductsAmount": 7.5
            },
            "ProductsType": "X Box One Game"
          }
        }
      ]
    },
    "ProductsCategoryId": "ProductS001"
  }
]

HTH

您介意提供一些示例输入吗?我已经添加了两个具有相同产品类别Id的记录的示例csv数据。我一直在查看group by和FLATNE命令,但未能获得正确的结果。当我尝试使用dataLookup功能时,我发现解决方案出现错误,该功能是“无法将:null强制为:键“。我已将问题和csv文件中的代码更新为较少的字段。你知道这可能是原因吗?我怎么能忽略空值?需要注意的一点是,主体从CSV文件的第5行开始。另外,是否有关于dataLookup函数的文档。正在努力寻找任何有助于调查这一问题的方法