【问题标题】:Jolt transform several object to array with new field nameJolt 将多个对象转换为具有新字段名称的数组
【发布时间】:2022-01-19 09:55:44
【问题描述】:

我是使用 jolt 工具的新手,我想知道是否有办法获取几个 json 对象并将它们放入一个具有如下新字段的数组中:

输入

{
  "userId": 1,
  "age": 20,
  "desc1": "value desc1",
  "desc2": "value desc2",
  "desc3": "value desc3"
}

JSON 规范

[
  {
    "operation": "shift",
    "spec": {
      "userId": "ID",
      "age": "age",
      "*": "additionalInformation"
    }
  }
]

预期结果

{
  "ID": 1,
  "age": 20,
  "additionalInformation": [
    {
      "code": "desc1",
      "value": "value desc1"
    },
    {
      "code": "desc2",
      "value": "value desc2"
    },
    {
      "code": "desc3",
      "value": "value desc3"
    }
  ]
}

使用上面的规范我只能得到这个结果

{
  "ID": 1,
  "test": 20,
  "additionalInformation": [
    "value desc1",
    "value desc2",
    "value desc3"
  ]
}

有什么我错过的建议吗?

【问题讨论】:

    标签: java json jolt


    【解决方案1】:

    $@ 通配符可以分别用于 codevalue,同时组合 common 下的元素在第一步中使用 &. 作为它们的前缀。然后在上一步将IDage以外的元素合并到同一个数组中,如

    [
      {
        "operation": "shift",
        "spec": {
          "userId": "ID",
          "age": "age",
          "*": {
            "$": "&.code",
            "@": "&.value"
          }
        }
      },
      {
        "operation": "shift",
        "spec": {
          "ID": "&",
          "age": "&",
          "*": "additionalInformation[]"
        }
      }
    ]
    

    编辑由于评论):如果您需要选择一些单独的元素,例如 desc1desc3 而不是 all("*"),然后将第一个规范替换为以下

      {
        "operation": "shift",
        "spec": {
          "userId": "ID",
          "age": "age",
          "desc1|desc3": {
            "$": "&.code",
            "@": "&.value"
          }
        }
      }
    

    【讨论】:

    • 非常感谢@Barbaros,这正是我所期待的。但是,如果我们只需要选择特定字段将它们放入数组中(例如 desc1 和 desc3),则通配符无法做到这一点,因为它需要所有其他可用字段
    • 感谢您的帮助。我最终使用了在文档中找到的另一种方式也适合我的需要,但是我仍然很难删除在上面屏幕中提到的输出中生成的空值。有什么建议吗?
    • 嗨@Yawyaw1。让我们通过恢复上次更新来保留这个问题,因为它已经被回答了,并且请在添加新规范的同时询问另一个问题。
    猜你喜欢
    • 2023-02-06
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多