英文:
Jolt not printing anything
问题
以下是翻译好的内容:
[
{
"practice_loc": "120",
"prac_num": "oswal",
"topId": "t1",
"subList": [
{
"S1": "A1",
"S2": "B1"
},
{
"S1": "A2",
"S2": ""
}
]
},
{
"practice_loc": "334",
"prac_num": "L3",
"topId": "plumcherry",
"subList": [
{
"SubID1": "A3",
"SubID2": ""
}
]
},
{
"practice_loc": "987",
"prac_num": "L3",
"topId": "artica",
"subList": [
{
"SubID1": "A5",
"SubID2": "B7"
}
]
}
]
请注意,我已经将HTML编码的引号("
)更改为正常的双引号("
)以便于阅读。
英文:
I am writing jolt for transforming this data but not getting desired result
If practice_loc
,prac_num
and topId
are same for two or more data then they will be combined together with separate S1 and S2 within subList
. Else they would pass as it is with addition of subList only.
Data
[
{
"practice_loc": "120",
"prac_num": "oswal",
"topId": "t1",
"S1": "A1",
"S2": "B1"
},
{
"practice_loc": "120",
"prac_num": "oswal",
"topId": "t1",
"S1": "A2",
"S2": ""
},
{
"practice_loc": "334",
"prac_num": "L3",
"topId": "plumcherry",
"S1": "A3",
"S2": ""
},
{
"practice_loc": "987",
"prac_num": "L3",
"topId": "artica",
"S1": "A5",
"S2": "B7"
}
]
Expected Output:
[
{
"practice_loc": "120",
"prac_num": "oswal",
"topId": "t1"
"subList": [
{
"S1": "A1",
"S2": "B1"
},
{
"S1": "A2",
"S2": ""
}
]
},
{
"practice_loc": "334",
"prac_num": "L3",
"topId": "plumcherry"
"subList": [
{
"SubID1": "A3",
"SubID2": ""
}
]
},
{
"practice_loc": "987",
"prac_num": "L3",
"topId": "artica",
"subList": [
{
"SubID1": "A5",
"SubID2": "B7"
}
]
}
]
Here is what I tried but didnt get desired result Its not printing anything
[
{
"operation": "shift",
"spec": {
"*": {
"@": "@(1,practice_loc).@(1,prac_num).@(1,topId)"
}
}
},
{
"operation": "cardinality",
"spec": {
"*": {
"*": "MANY"
}
}
},
{
"operation": "shift",
"spec": {
"*": {
"*": {
"*": {
"practice_loc": "[#4].&",
"prac_num": "[#4].&",
"topId": "[#4].&",
"S*": "[#4].subList[&1].&"
}
}
}
}
},
{
"operation": "cardinality",
"spec": {
"*": {
"practice_loc": "ONE",
"prac_num": "ONE",
"topId": "ONE"
}
}
}
]
答案1
得分: 1
您当前的规范相当不错。可以像这样重新排列它:
[
{ // 按这三个属性分组
"operation": "shift",
"spec": {
"*": {
"*": "@1,practice_loc.@1,prac_num.@1,topId.&"
}
}
},
{ // 摆脱包装
"operation": "shift",
"spec": {
"*": {
"*": {
"*": {
"@": ""
}
}
}
}
},
{
"operation": "cardinality",
"spec": {
"*": {
"*": "ONE", // 从重复的组件中选择一个
"subList": "MANY"
}
}
},
{ // 摆脱子列表数组中生成的空值
"operation": "modify-overwrite-beta",
"spec": {
"*": "=recursivelySquashNulls"
}
}
]
编辑 示例:下面,我粘贴了在为具有版本 1.21.0 的 JoltTransformJSON
处理器的 Configure
部分的 ADVANCED
选项卡切换后所获得的图像,就像 NiFi 一样。顺便说一下,你的版本也是最新的版本。
英文:
Your current spec is pretty good. Would be suitable to rearrange it like that
[
{ // group by those three attributes
"operation": "shift",
"spec": {
"*": {
"*": "@1,practice_loc.@1,prac_num.@1,topId.&",
"S*": "@1,practice_loc.@1,prac_num.@1,topId.subList[&1].&"
}
}
},
{ // get rid of wrappers
"operation": "shift",
"spec": {
"*": {
"*": {
"*": {
"@": ""
}
}
}
}
},
{
"operation": "cardinality",
"spec": {
"*": {
"*": "ONE", // pick only single one from repeating components
"subList": "MANY"
}
}
},
{ // get rid of generated nulls within subList arrays
"operation": "modify-overwrite-beta",
"spec": {
"*": "=recursivelySquashNulls"
}
}
]
Edit for illustration : Below, I have pasted the image what I get after toggling ADVANCED
tab of Configure
section for the JoltTransformJSON
processor which has the version 1.21.0 as NiFi does. Btw, yours is a recent version as well.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论