我在 chatGPT 上花费了超过 8 个小时,其中包括人们创建的有关 DataWeave 的一些 ChatGPT。我正在尝试创建一个包含产品数组的 json 结构。但我得到的脚本似乎用最后一个条目覆盖了产品列表。这就像我需要追加到数组中,但它没有发生。
如何追加到数组,而不是看似覆盖。
csv是这样的
Dan,FirstName,LastName,DateofBirth,ProductName,ProductValue
q,denis,Kriz,01/01/1980,sales cloud,1000
q,denis,kriz,01/01/1980,service cloud,2000
x,lucas,kriz,01/01/2010,marketing cloud,3000
我想要一个像这样的json结构
{
"Dan": "q",
"FirstName": "denis",
"LastName": "kriz",
"DateOfBirth": "01/01/1980",
"Products": [
{
"productName": "sales cloud",
"productValue": 1000
},
{
"productName": "service cloud",
"productValue": 2000
}
],
"Dan": "x",
"FirstName": "lucas",
"LastName": "kriz",
"DateOfBirth": "01/01/2010",
"Products": [
{
"productName": "marketing cloud",
"productValue": 3000
}
]
}
ChatGPT 让我看到了这个脚本;
%dw 2.0
output application/json
var data = payload
var header = data[0]
var rows = data[1 to -1]
var includedFields = ["ProductName", "ProductValue"]
var groupedData = rows groupBy ($.Dan) mapObject ((value, key, index) -> {
Dan: key,
FirstName: value[0].FirstName,
LastName: value[0].LastName,
DateOfBirth: value[0].DateofBirth,
Products: value map ((item, index) -> {
productName: (item.ProductName as String),
productValue: (item.ProductValue as Number)
})
})
---
groupedData
如果您正在寻找以下 JSON 作为所需的输出
[
{
"Dan": "q",
"FirstName": "denis",
"LastName": "kriz",
"DateOfBirth": "01/01/1980",
"Products": [
{
"productName": "sales cloud",
"productValue": 1000
},
{
"productName": "service cloud",
"productValue": 2000
}
]
},
{
"Dan": "x",
"FirstName": "lucas",
"LastName": "kriz",
"DateOfBirth": "01/01/2010",
"Products": [
{
"productName": "marketing cloud",
"productValue": 3000
}
]
}
]
你可以使用这个脚本:
%dw 2.0
output application/json
import * from dw::core::Strings
// Directly process the CSV payload
var groupedData = payload groupBy (item) ->
item.Dan ++ '|' ++ item.FirstName ++ '|' ++ item.LastName ++ '|' ++ item.DateofBirth
---
// Transform grouped data into the desired JSON structure
valuesOf(groupedData) map ((group, index) -> {
Dan: group[0].Dan,
FirstName: group[0].FirstName,
LastName: group[0].LastName,
DateOfBirth: group[0].DateofBirth,
Products: group map (product) -> {
productName: product.ProductName,
productValue: (product.ProductValue as Number)
}
})