【问题标题】:Pushing Values to Inner Array with Jolt使用 Jolt 将值推送到内部数组
【发布时间】:2021-10-05 09:36:02
【问题描述】:

我需要从嵌套数组创建一个平面数组。 输入 JSON 看起来像

[
  {
    "resource": "r1",
    "application": "app1",
    "description": "desc1",
    "type": "t1",
    "labels": [
      {
        "instance": "i1",
        "team": "yellow",
        "network": "nnn",
        "environment": "prod",
        "value": 77,
        "stat": "some stat"
      },
      {
        "instance": "i2",
        "team": "green",
        "network": "mmm",
        "environment": "prod",
        "value": 0.1
      }
    ]
  },
  {
    "resource": "r2",
    "application": "app2",
    "description": "desc2",
    "type": "t2",
    "labels": [
      {
        "instance": "i3",
        "team": "red",
        "network": "vvv",
        "environment": "prod",
        "value": 6457
      }
    ]
  }
]

预期的输出是

[
  {
    "resource": "r1",
    "application": "app1",
    "description": "desc1",
    "type": "t1",
    "instance": "i1",
    "team": "yellow",
    "network": "nnn",
    "environment": "prod",
    "value": 77,
    "stat": "some stat"
  },
  {
    "resource": "r1",
    "application": "app1",
    "description": "desc1",
    "type": "t1",
    "instance": "i2",
    "team": "green",
    "network": "mmm",
    "environment": "prod",
    "value": 0.1
  },
  {
    "resource": "r2",
    "application": "app2",
    "description": "desc2",
    "type": "t2",
    "instance": "i3",
    "team": "red",
    "network": "vvv",
    "environment": "prod",
    "value": 6457
  }
]

这只是 1 个示例,我需要能够使用不同的键处理数据。基本上每个标签都需要是根级数组的一个项目,其中包含来自添加到它的资源的键和值。我试过这个:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": "[&1].&",
        "labels": {
          "*": {
            "*": "[&1].&"
          }
        }
      }
    }
  }
]

但结果是

[
  {
    "resource": "r1",
    "application": "app1",
    "description": "desc1",
    "type": "t1",
    "instance": [ "i1" , "i3" ],
    "team": [ "yellow", "red" ],
    "network": [ "nnn", "vvv" ],
    "environment": [ "prod", "prod" ],
    "value": [ 77, 6457 ],
    "stat": "some stat"
  },
  {
    "instance": "i2",
    "team": "green",
    "network": "mmm",
    "environment": "prod",
    "value": 0.1,
    "resource": "r2",
    "application": "app2",
    "description": "desc2",
    "type": "t2"
  }
]

谁能帮我解决这个问题?

【问题讨论】:

  • 最外层的键(resource,application,description,type) 可能是固定的,而labels 的元素是动态引入的......?
  • @BarbarosÖzhan 这就是我现在最终要做的,但它们可能并不总是固定的。
  • 如果您愿意,我可以将它们视为已修复...
  • 那将是一个很大的帮助!如果可以,请发布它@BarbarosÖzhan :)

标签: json jolt


【解决方案1】:

通过在labels 数组中保持最外层元素的键值对固定,同时保持它们动态,您可以使用:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "labels": {
          "*": {
            "@(2,resource)": "&3.[&].resource",
            "@(2,application)": "&3.[&].application",
            "@(2,description)": "&3.[&].description",
            "@(2,type)": "&3.[&].type",
            "*": "&3.[&1].&"
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": ""
      }
    }
  }
]

第二个规范用于在分离对象时摆脱索引中的废墟。

【讨论】:

  • 我不知道我是否应该接受这个作为解决方案,因为这不是我所要求的,但它非常有帮助!
  • 对于任何查看此内容的人来说只是一个快速说明,如果输出需要是一个数组,即使只有一个项目,请将第二个规范更改为 "*":"[]"。
猜你喜欢
  • 2018-07-07
  • 1970-01-01
  • 2020-10-23
  • 2019-04-16
  • 2017-04-24
  • 2016-11-18
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
相关资源
最近更新 更多