输入:Null 和空字符串已正确处理,但问题在于设置 tempName 和 name 的值。
如果 tempName="" 或 null,则 name 的值需要相同。名称值没有变化。
如果 tempName="SomeValue",则名称字段必须设置为“SomeValue”
下面是 tempName 为 null 且名称为 test1 的输入规范
`
[
{
"bI": {
"id": "t1",
"locale": [
"id_ID",
"id_ID"
],
"tempName": "",
"name": "Test1",
"isActive": false,
"pT": "Re"
},
"id": "t1",
"ContextID": "id_ID",
"cf": {
"name": "asd"
},
"dE": {
"sS": "arte"
},
"mk": {},
"pd": {}
}
]`
下面是适用于处理 tempName 的 null 和空值的规范。这是按预期处理的
`[
{
"operation": "shift",
"spec": {
"*": {
"*": "[&1].&",
"bI": {
"*": "[&2].bI.&",
"tempName": {
"": "[&3].&2.&1",
"*": {
"@1": "[&4].&3.&2"
}
}
}
}
}
}
]`
场景 1:当上述规范应用于 tempName="" 的输入 json 时,tempName 的输出将设置为 null,如下所示。
`[ {
"bI" : {
"id" : "t1",
"locale" : [ "id_ID", "id_ID" ],
"tempName" : null,
"name" : "Test1",
"isActive" : false,
"pT" : "Re"
},
"id" : "t1",
"ContextID" : "id_ID",
"cf" : {
"name" : "asd"
},
"dE" : {
"sS" : "arte"
},
"mk" : { },
"pd" : { }
} ]`
场景 2:当上述规范应用于 tempName="abc" 的输入 json 时,tempName 的输出将设置为“abc”,如下所示。
`[ {
"bI" : {
"id" : "t1",
"locale" : [ "id_ID", "id_ID" ],
"tempName" : "abc",
"name" : "Test1",
"isActive" : false,
"pT" : "Re"
},
"id" : "t1",
"ContextID" : "id_ID",
"cf" : {
"name" : "asd"
},
"dE" : {
"sS" : "arte"
},
"mk" : { },
"pd" : { }
} ]`
使用上述规范,可以处理 tempName 的 null 和空字符串值,但是何时
场景 3 当 tempName="" 或 tempName=null 名称时,值需要保持原样。
场景 4 当 tempName="abc" 时,name 的值设置为“abc”作为 tempName
但是,场景 1 和 2 使用以下规范进行处理,但场景 3 和 4 不起作用。
处理所有场景的最终规范:
`[
{
"operation": "shift",
"spec": {
"*": {
"*": "[&1].&",
"bI": {
"*": "[&2].bI.&",
"tempName": {
"": "[&3].&2.&1",
"*": {
"@1": "[&4].&3.&2"
}
}
}
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"*": {
"name": "=notNull(@(1,tempName))"
}
}
},
{
"operation": "remove",
"spec": {
"*": {
"tempName": ""
}
}
}
]`
预期输出:
当 tempName=""时
`
[ {
"bI" : {
"id" : "t1",
"locale" : [ "id_ID", "id_ID" ],
"tempName" : null,
"name" : "Test1",
"isActive" : false,
"pT" : "Re"
},
"id" : "t1",
"ContextID" : "id_ID",
"cf" : {
"name" : "asd"
},
"dE" : {
"sS" : "arte"
},
"mk" : { },
"pd" : { }
} ]`
当 tempName="abc" 时
`[ {
"bI" : {
"id" : "t1",
"locale" : [ "id_ID", "id_ID" ],
"tempName" : "abc",
"name" : "abc",
"isActive" : false,
"pT" : "Re"
},
"id" : "t1",
"ContextID" : "id_ID",
"cf" : {
"name" : "asd"
},
"dE" : {
"sS" : "arte"
},
"mk" : { },
"pd" : { }
} ]`
我不确定我是否完全理解你的问题,但我尝试在不同的场景下运行你的规范(
TempName
=“”,null和“value”)并注意到有时它没有产生达到预期的结果。
例如,当
tempName
被填充时,name
的值没有变化;这是因为您在 modify-overwrite-beta
中编写的规范并不完全正确 - 您没有正确指定值的位置。当 tempName
设置为 null 时出现另一个问题;在这种情况下,由于 Jolt 的逻辑,该值消失了。要解决这个问题,您只需在要保留的值的开头添加一个下划线(“_”)(“_somekey”检查 somekey
是否已经存在,如果不存在,则创建它,否则它什么都不做)。
最终规格与您提供的规格几乎相同,仅进行了一些调整:
[
{
"operation": "shift",
"spec": {
"*": {
"*": "[&1].&",
"bI": {
"*": "[&2].bI.&",
"tempName": {
"": "[&3].&2.&1",
"*": {
"@1": "[&4].&3.&2"
}
}
}
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"*": {
"bI": {
"_tempName": null,
"name": "=notNull(@(1,tempName))"
}
}
}
}
]
我删除了
remove
规范,因为我不明白它在你的问题中的用途。