mule - Mule 4 /DW 2.0 如何根据“标题”插入此 JSON?
问题描述
我有一个 JSON 如下:
[{
"Number": "66667",
"Date": "2020-08-29 16:40:32.0",
"Account Number": {"externalId":1,"account": 122},
"Title": "ABC",
"Auto Reversing": "",
"Debit": 20,
"Credit": 0
},
{
"Number": "66667",
"Date": "2020-08-29 16:40:32.0",
"Account Number": {"externalId":1,"account": 122},
"Title": "ABC",
"Auto Reversing": "",
"Debit": 10,
"Credit": 0
},
{
"Number": "66667",
"Date": "2020-08-29 16:40:32.0",
"Account Number": {"externalId":1,"account": 122},
"Title": "ABC",
"Auto Reversing": "",
"Debit": 0,
"Credit": 30
},
{
"Number": "66667",
"Date": "2020-08-29 16:40:32.0",
"Account Number": {"externalId":1,"account": 3144},
"Title": "DEF",
"Auto Reversing": "",
"Debit": 10,
"Credit": 0
},
{
"Number": "66667",
"Date": "2020-08-29 16:40:32.0",
"Account Number": {"externalId":1,"account": 3144},
"Title": "DEF",
"Auto Reversing": "",
"Debit": 0,
"Credit": 10
}
]
ABC
我必须将此数据上传到 netsuite,因此,应该只根据“标题”字段(和DEF
此处)中的不同标题在 netsuite 中创建记录。
同一标题的每个条目都应不断更新记录,例如,对于 title 的每个条目,ABC
netsuite 中应该只有 1 条记录,所有值都已更新。
我尝试过使用groupby
,但是,动态更新 groupby 对象给我带来了问题。这是groupby之后的输出。
{
"DEF": [
{
"Number": "66667",
"Date": "2020-08-29 16:40:32.0",
"Account Number": {
"externalId": 1,
"account": 3144
},
"Title": "DEF",
"Auto Reversing": "",
"Debit": 0,
"Credit": 10
},
{
"Number": "66667",
"Date": "2020-08-29 16:40:32.0",
"Account Number": {
"externalId": 1,
"account": 3144
},
"Title": "DEF",
"Debit": 0,
"Credit": 10
}
],
"ABC": [
{
"Number": "66667",
"Date": "2020-08-29 16:40:32.0",
"Account Number": {
"externalId": 1,
"account": 3144
},
"Title": "ABC",
"Debit": 20,
"Credit": 0
},
{
"JE Number": "66667",
"JE Date": "2020-08-29 16:40:32.0",
"Account Number": {
"externalId": 1,
"account": 3144
},
"Journal Entry Title": "ABC",
"Debit": 10,
"Credit": 0
},
{
"JE Number": "66667",
"JE Date": "2020-08-29 16:40:32.0",
"Account Number": {
"externalId": 1,
"account": 3144
},
"Journal Entry Title": "ABC",
"Debit": 0,
"Credit": 30
}
]
}
我不知道如何进一步进行此操作。
解决方案
首先让我说你的问题不清楚。我将在下面回答我的答案:“总共应该只生成 2 条记录,一条带有标题 ABC,另一条带有 DEF。”
我确实使用了dw::core::Objects::mergeWith
函数,你可以在这里找到文档:https ://docs.mulesoft.com/mule-runtime/4.2/dw-objects-functions-mergewith
尝试这个:payload distinctBy $.Title
编辑:既然你进一步澄清了这个问题,我可以告诉你我不知道如何使用 netsuite 连接器,但我知道 DW,我可以用相同的方式逐步更新对象,Title
从而给我更新的结果。
试试这个代码:
%dw 2.0
output application/dw
var data = [{
"Number": "66667",
"Date": "2020-08-29 16:40:32.0",
"Account Number": {"externalId":1,"account": 122},
"Title": "ABC",
"Auto Reversing": "",
"Debit": 20,
"Credit": 0
},
{
"Number": "66667",
"Date": "2020-08-29 16:40:32.0",
"Account Number": {"externalId":1,"account": 122},
"Title": "ABC",
"Auto Reversing": "",
"Debit": 10,
"Credit": 0
},
{
"Number": "66667",
"Date": "2020-08-29 16:40:32.0",
"Account Number": {"externalId":1,"account": 122},
"Title": "ABC",
"Auto Reversing": "",
"Debit": 0,
"Credit": 30
},
{
"Number": "66667",
"Date": "2020-08-29 16:40:32.0",
"Account Number": {"externalId":1,"account": 3144},
"Title": "DEF",
"Auto Reversing": "",
"Debit": 10,
"Credit": 0
},
{
"Number": "66667",
"Date": "2020-08-29 16:40:32.0",
"Account Number": {"externalId":1,"account": 3144},
"Title": "DEF",
"Auto Reversing": "",
"Debit": 0,
"Credit": 10
}
]
---
// Group the data by Title
data groupBy $.Title
// Iterate over the object
mapObject {
($$): (
// Iterate over the array in the values and mergeWith the sequence
// of objects with the same title
// NOTE: the values to the right take precedence when using mergeWith.
$ reduce (e, acc={}) -> acc dw::core::Objects::mergeWith e
)
}
// Restore the array with the updated objects
pluck $
推荐阅读
- php - 在 PHP 中访问局部变量
- r - 以 HH:MM 格式设置 x 轴,而不会丢失时间段
- sql - 现有项目中的 SQL 注入修复
- flutter - StreamBuilder 中的 TextField 丢失了编辑后的值
- numpy - numpy:从 recarray dtype 获取 ndarray dtype
- css - 格式为 2 背景图像
- powershell - Powershell 将文件解压缩到特定文件夹中
- firebase - 每台设备 Flutter 一个帐户
- ios - 如何声明一个符合具有特定关联类型的协议的变量?
- typescript - 评估打字稿语句时出现“ReferenceError:未定义模块”