匹配上的 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,因为在您的条件逻辑中嵌套在对象中,键名 livingYes*。然后,将键名 familyMembersliving 通过适当的 & 替换转换为将 { 符号计算到达到其符合名称的级别以及括号替换([&1]and[&3]) 应该到达familyMembers数组下的符合索引符号。

例如,您将计数两次 { 以便从其对应项到达 living 键,并将叶子 livings 替换为 &2 例如

[
  {
    "operation": "shift",
    "spec": {
      "familyMembers": {
        "*": {
          "living": {
            "Yes": {
              "#true": "&4[&3].&2"
            },
            "*": {
              "#false": "&4[&3].&2"
            }
          },
          "*": "&2[&1].&"
        }
      }
    }
  }
]