在将对象的字符串转换为整数时在 Jolt 中进行空检查
Null Check in Jolt while converting string to integer For an Object
我在 jolt 规范中将字符串转换为 integer/double。如果请求中没有元素,则响应为空对象。相反,我不想将该对象本身作为空对象传递。
输入请求工作:
{
"data": {
"first": "1",
"second": "2"
}
}
颠簸规格:
[
{
"operation": "shift",
"spec": {
"data": {
"first": "datas.firstTag",
"second": "datas.second.secondTag"
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"datas": {
"firstTag": "=toInteger",
"second": {
"secondTag": "=toInteger"
}
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"*": "=recursivelySquashNulls"
}
}
]
如果请求中有标签则输出:
{
"datas" : {
"firstTag" : 1,
"second" : {
"secondTag" : 2
}
}
}
但是当输入请求如下所示时,我没有得到第二个标签:
{
"data": {
"first": "1"
}
}
当前输出:
{
"datas" : {
"firstTag" : 1,
"second" : { }
}
}
将第二个对象设为空
"second" : { }
预期输出:
{
"datas" : {
"firstTag" : 1
}
}
请帮助解决这个问题。
通过使用
等符号占位符以动态方式重新思考
[
{
"operation": "shift",
"spec": {
"*": {
"first": "&1s.&Tag",
"*": { "@(1,&)": "&2s.&.&Tag" }
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"*": {
"firstTag": "=toInteger",
"*": {
"*": "=toInteger"
}
}
}
}
]
这些&符号的后缀整数表示要上升以获取所需值的级别,例如 &1 和 &2 代表 data,&不带整数后缀表示从当前级别开始的值
"*" 通配符表示其余元素,除了 first 在这种情况下(您可能有 third, fourth ...作为其他要格式化的元素,如 the second)
第一种情况:
第二种情况:
Edit : 对于编辑中提到的当前案例,为了得到
{
"datas" : {
"firstTag" : "1",
"second" : {
"secondTag" : "2",
"secondNew" : "3"
}
}
}
来自输入
{
"data": {
"first": "1",
"second": "2",
"secondNew": "3"
}
}
其中有一个新条目 "secondNew": "3",您需要在规范中明确写入每个键,例如
[
{
"operation": "shift",
"spec": {
"*": {
"first": "&1s.&Tag",
"second": "&1s.&.&Tag",
"secondNew": "&1s.second.&"
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"*": {
"firstTag": "=toInteger",
"*": {
"*": "=toInteger"
}
}
}
}
]
为了合并公共对象下的其余元素。
我在 jolt 规范中将字符串转换为 integer/double。如果请求中没有元素,则响应为空对象。相反,我不想将该对象本身作为空对象传递。
输入请求工作:
{
"data": {
"first": "1",
"second": "2"
}
}
颠簸规格:
[
{
"operation": "shift",
"spec": {
"data": {
"first": "datas.firstTag",
"second": "datas.second.secondTag"
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"datas": {
"firstTag": "=toInteger",
"second": {
"secondTag": "=toInteger"
}
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"*": "=recursivelySquashNulls"
}
}
]
如果请求中有标签则输出:
{
"datas" : {
"firstTag" : 1,
"second" : {
"secondTag" : 2
}
}
}
但是当输入请求如下所示时,我没有得到第二个标签:
{
"data": {
"first": "1"
}
}
当前输出:
{
"datas" : {
"firstTag" : 1,
"second" : { }
}
}
将第二个对象设为空
"second" : { }
预期输出:
{
"datas" : {
"firstTag" : 1
}
}
请帮助解决这个问题。
通过使用
等符号占位符以动态方式重新思考[
{
"operation": "shift",
"spec": {
"*": {
"first": "&1s.&Tag",
"*": { "@(1,&)": "&2s.&.&Tag" }
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"*": {
"firstTag": "=toInteger",
"*": {
"*": "=toInteger"
}
}
}
}
]
这些&符号的后缀整数表示要上升以获取所需值的级别,例如 &1 和 &2 代表 data,&不带整数后缀表示从当前级别开始的值
"*" 通配符表示其余元素,除了 first 在这种情况下(您可能有 third, fourth ...作为其他要格式化的元素,如 the second)
第一种情况:
第二种情况:
Edit : 对于编辑中提到的当前案例,为了得到
{
"datas" : {
"firstTag" : "1",
"second" : {
"secondTag" : "2",
"secondNew" : "3"
}
}
}
来自输入
{
"data": {
"first": "1",
"second": "2",
"secondNew": "3"
}
}
其中有一个新条目 "secondNew": "3",您需要在规范中明确写入每个键,例如
[
{
"operation": "shift",
"spec": {
"*": {
"first": "&1s.&Tag",
"second": "&1s.&.&Tag",
"secondNew": "&1s.second.&"
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"*": {
"firstTag": "=toInteger",
"*": {
"*": "=toInteger"
}
}
}
}
]
为了合并公共对象下的其余元素。