Jolt 组合在一起并包含新标签
Jolt grouping together and including new tags
我有以下输入 JSON 并希望根据设备名称对子 json 进行分组。(必须从地址中提取设备名称)。另外,我想为新形成的数组添加新标签(每个数组包含仅具有该类型设备名称的 json)。
我已经尝试过以下规范,但数组名称显示为 deviceName
而不是自定义参数(我不知道如何提供自定义名称。例如,我希望数组名称为 "Parameters").我无法从地址字段中提取设备名称。(设备名称应为 "bee"/"honey")。另外,我想添加一个新字段,该字段应该为新数组(而不是每个元素)存在一次。
输入Json:
{
"CID": "AND",
"parameters": [{
"address": "abc:api:honey",
"name": "CH1"
},
{
"address": "abc:api:honey",
"name": "CH2"
},
{
"address": "abc:api:bee",
"name": "lat"
},
{
"address": "abc:api:bee",
"name": "long"
}
],
"rNo": 1232
}
预期输出:
[{
"ID": "AND_1232",
"parameters": [{
"deviceName": "honey",
"name": "CH1",
"locoId": 1232,
"CID": "AND"
},
{
"deviceName": "honey",
"name": "CH2",
"locoId": 1232,
"CID": "AND"
}
],
"SpData": {
}
},
{
"ID": "AND_1232",
"parameters": [{
"deviceName": "bee",
"name": "lat",
"locoId": 1232,
"CID": "AND"
},
{
"deviceName": "bee",
"name": "long",
"locoId": 1232,
"CID": "AND"
}
],
"SpData": {
}
}]
我试过的规格:
[
{
"operation": "shift",
"spec": {
"parameters": {
"*": {
"@(2,CID)": "&2.[&1].CID",
"*": "&2.[&1].&",
"@(2,rNo)": "&2.[&1].locoId"
}
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"ID": "=concat(@(0,CID),'_',@(0,rNo))",
"parameters": {
"*": {
"deviceName": "=substring(@(1,address),8,11)",
"SpData": {}
}
}
}
}, {
"operation": "shift",
"spec": {
"parameters": {
"*": {
"deviceName": {
"*": {
"@2": "&[]"
}
}
}
}
}
}
]
下面会输出想要的结果,每个操作分别做如下操作:
- 通过连接 CID 和 rNo 添加 ID
- 在所有参数中添加 rNo 和 CID,并添加 deviceName(有关设备名称拆分的详细信息,请参阅 here)。
- 使用对象按设备名称对记录进行分组
- 为每个组添加ID
- 将临时分组转换为数组
- 添加默认 SpData
[
{
"operation": "modify-default-beta",
"spec": {
"ID": "=concat(@(1,CID),'_',@(1,rNo))"
}
},
{
"operation": "shift",
"spec": {
"ID": "&",
"parameters": {
"*": {
"address": {
"*:*:*": {
"$(0,3)": "parameters.[&3].deviceName"
}
},
"@(0,name)": "parameters.[&].name",
"@(2,rNo)": "parameters.[&].locoId",
"@(2,CID)": "parameters.[&].CID"
}
}
}
},
{
"operation": "shift",
"spec": {
"ID": "&",
"parameters": {
"*": {
"deviceName": {
"*": {
"@(3,[&2])": "tmp.&.parameters.[]"
}
}
}
}
}
},
{
"operation": "shift",
"spec": {
"tmp": {
"*": {
"@(2,ID)": "&1.ID",
"parameters": {
"@": "&2.parameters"
}
}
}
}
},
{
"operation": "shift",
"spec": {
"*": "[]"
}
},
{
"operation": "default",
"spec": {
"*": {
"SpData": {}
}
}
}
]
我有以下输入 JSON 并希望根据设备名称对子 json 进行分组。(必须从地址中提取设备名称)。另外,我想为新形成的数组添加新标签(每个数组包含仅具有该类型设备名称的 json)。
我已经尝试过以下规范,但数组名称显示为 deviceName
而不是自定义参数(我不知道如何提供自定义名称。例如,我希望数组名称为 "Parameters").我无法从地址字段中提取设备名称。(设备名称应为 "bee"/"honey")。另外,我想添加一个新字段,该字段应该为新数组(而不是每个元素)存在一次。
输入Json:
{
"CID": "AND",
"parameters": [{
"address": "abc:api:honey",
"name": "CH1"
},
{
"address": "abc:api:honey",
"name": "CH2"
},
{
"address": "abc:api:bee",
"name": "lat"
},
{
"address": "abc:api:bee",
"name": "long"
}
],
"rNo": 1232
}
预期输出:
[{
"ID": "AND_1232",
"parameters": [{
"deviceName": "honey",
"name": "CH1",
"locoId": 1232,
"CID": "AND"
},
{
"deviceName": "honey",
"name": "CH2",
"locoId": 1232,
"CID": "AND"
}
],
"SpData": {
}
},
{
"ID": "AND_1232",
"parameters": [{
"deviceName": "bee",
"name": "lat",
"locoId": 1232,
"CID": "AND"
},
{
"deviceName": "bee",
"name": "long",
"locoId": 1232,
"CID": "AND"
}
],
"SpData": {
}
}]
我试过的规格:
[
{
"operation": "shift",
"spec": {
"parameters": {
"*": {
"@(2,CID)": "&2.[&1].CID",
"*": "&2.[&1].&",
"@(2,rNo)": "&2.[&1].locoId"
}
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"ID": "=concat(@(0,CID),'_',@(0,rNo))",
"parameters": {
"*": {
"deviceName": "=substring(@(1,address),8,11)",
"SpData": {}
}
}
}
}, {
"operation": "shift",
"spec": {
"parameters": {
"*": {
"deviceName": {
"*": {
"@2": "&[]"
}
}
}
}
}
}
]
下面会输出想要的结果,每个操作分别做如下操作:
- 通过连接 CID 和 rNo 添加 ID
- 在所有参数中添加 rNo 和 CID,并添加 deviceName(有关设备名称拆分的详细信息,请参阅 here)。
- 使用对象按设备名称对记录进行分组
- 为每个组添加ID
- 将临时分组转换为数组
- 添加默认 SpData
[
{
"operation": "modify-default-beta",
"spec": {
"ID": "=concat(@(1,CID),'_',@(1,rNo))"
}
},
{
"operation": "shift",
"spec": {
"ID": "&",
"parameters": {
"*": {
"address": {
"*:*:*": {
"$(0,3)": "parameters.[&3].deviceName"
}
},
"@(0,name)": "parameters.[&].name",
"@(2,rNo)": "parameters.[&].locoId",
"@(2,CID)": "parameters.[&].CID"
}
}
}
},
{
"operation": "shift",
"spec": {
"ID": "&",
"parameters": {
"*": {
"deviceName": {
"*": {
"@(3,[&2])": "tmp.&.parameters.[]"
}
}
}
}
}
},
{
"operation": "shift",
"spec": {
"tmp": {
"*": {
"@(2,ID)": "&1.ID",
"parameters": {
"@": "&2.parameters"
}
}
}
}
},
{
"operation": "shift",
"spec": {
"*": "[]"
}
},
{
"operation": "default",
"spec": {
"*": {
"SpData": {}
}
}
}
]