匹配上的 JOLT json 数组应用字符串默认值
JOLT json array on a match apply String default
具有以下输入 json:
{
"familyMembers": [
{
"name": "Richard",
"living": "Yes"
},
{
"name": "Napoleon",
"living": "No"
}
]
}
目标是将 "living": "Yes"
更改为 "living": "true"
,因此所需的 输出 将如下所示:
{
"familyMembers" : [
{
"firstName" : "Richard",
"living": "true"
},
{
"firstName" : "Napoleon",
"living": "false"
}
]
}
以下 spec 未产生所需的输出:
[
{
"operation": "shift",
"spec": {
"familyMembers": {
"*": {
"name": "familyMembers[&1].firstName",
"living": {
"Yes": {
"#true": "familyMembers[&1].living"
},
"*": {
"#false": "familyMembers[&1].living"
}
}
}
}
}
}
]
不包括 living
字段。
如果 familyMember
从数组更改为映射,则 living
字段将包含在输出中,并具有预期值,如本例所示:http://jolt-demo.appspot.com/#hashDefault
几天来,我一直在用 &, [], #
和数字的各种组合来解决这个问题。到目前为止没有运气。
这样的规范
[{
"operation": "shift",
"spec": {
"familyMembers": {
"*": {
"name": "familyMembers[&1].firstName",
"living": {
"Yes": {
"#true": "familyMembers[#].living"
},
"*": {
"#false": "familyMembers[#].living"
}
}
}
}
}
}]
产生
{
"familyMembers" : [
{
"firstName" : "Richard",
"living" : [
"true",
"false"
]
},
{
"firstName" : "Napoleon"
}
]
}
不是所要求的。
欢迎任何提示或帮助。
首先用 *
符号化另一种情况,而不是 living
,因为在您的条件逻辑中嵌套在对象中,键名 living
为 Yes
与 *
。然后,将键名 familyMembers
和 living
通过适当的 &
替换转换为将 {
符号计算到达到其符合名称的级别以及括号替换([&1]
and[&3]
) 应该到达familyMembers
数组下的符合索引符号。
例如,您将计数两次 {
以便从其对应项到达 living
键,并将叶子 living
s 替换为 &2
例如
[
{
"operation": "shift",
"spec": {
"familyMembers": {
"*": {
"living": {
"Yes": {
"#true": "&4[&3].&2"
},
"*": {
"#false": "&4[&3].&2"
}
},
"*": "&2[&1].&"
}
}
}
}
]
具有以下输入 json:
{
"familyMembers": [
{
"name": "Richard",
"living": "Yes"
},
{
"name": "Napoleon",
"living": "No"
}
]
}
目标是将 "living": "Yes"
更改为 "living": "true"
,因此所需的 输出 将如下所示:
{
"familyMembers" : [
{
"firstName" : "Richard",
"living": "true"
},
{
"firstName" : "Napoleon",
"living": "false"
}
]
}
以下 spec 未产生所需的输出:
[
{
"operation": "shift",
"spec": {
"familyMembers": {
"*": {
"name": "familyMembers[&1].firstName",
"living": {
"Yes": {
"#true": "familyMembers[&1].living"
},
"*": {
"#false": "familyMembers[&1].living"
}
}
}
}
}
}
]
不包括 living
字段。
如果 familyMember
从数组更改为映射,则 living
字段将包含在输出中,并具有预期值,如本例所示:http://jolt-demo.appspot.com/#hashDefault
几天来,我一直在用 &, [], #
和数字的各种组合来解决这个问题。到目前为止没有运气。
这样的规范
[{
"operation": "shift",
"spec": {
"familyMembers": {
"*": {
"name": "familyMembers[&1].firstName",
"living": {
"Yes": {
"#true": "familyMembers[#].living"
},
"*": {
"#false": "familyMembers[#].living"
}
}
}
}
}
}]
产生
{
"familyMembers" : [
{
"firstName" : "Richard",
"living" : [
"true",
"false"
]
},
{
"firstName" : "Napoleon"
}
]
}
不是所要求的。
欢迎任何提示或帮助。
首先用 *
符号化另一种情况,而不是 living
,因为在您的条件逻辑中嵌套在对象中,键名 living
为 Yes
与 *
。然后,将键名 familyMembers
和 living
通过适当的 &
替换转换为将 {
符号计算到达到其符合名称的级别以及括号替换([&1]
and[&3]
) 应该到达familyMembers
数组下的符合索引符号。
例如,您将计数两次 {
以便从其对应项到达 living
键,并将叶子 living
s 替换为 &2
例如
[
{
"operation": "shift",
"spec": {
"familyMembers": {
"*": {
"living": {
"Yes": {
"#true": "&4[&3].&2"
},
"*": {
"#false": "&4[&3].&2"
}
},
"*": "&2[&1].&"
}
}
}
}
]