【问题标题】:JOLT json array on a match apply String defaultJOLT json 数组在匹配时应用字符串默认值
【发布时间】:2022-01-05 13:40:21
【问题描述】:

具有以下输入 json:

{
  "familyMembers": [
    {
      "name": "Richard",
      "living": "Yes"
    },
    {
      "name": "Napoleon",
      "living": "No"
    }
  ]
}

目标是将"living": "Yes" 更改为"living": "true",以便所需的输出 如下所示:

{
  "familyMembers" : [
    {
      "firstName" : "Richard",
      "living": "true"
    },
    {
      "firstName" : "Napoleon",
      "living": "false"
    }
  ]
}

以下规范不会产生所需的输出:

[
  {
    "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"
    }
  ]
}

不是所需要的。

欢迎任何提示或帮助。

【问题讨论】:

    标签: java json jolt


    【解决方案1】:

    首先用* 而不是living 来表示另一种情况,就像在嵌套在键名为living 的对象中的条件逻辑中,Yes*。然后,通过适当的& 替换将键名familyMembersliving 转换为将{ 符号计数到该级别以达到它们的一致名称以及括号替换([&1]and[&3])应该达到familyMembers 数组下的符合索引符号。

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

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

    【讨论】:

    • 天哪,你太棒了。世界上从来没有我自己想出这种与符号的组合。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多