【问题标题】:move a field into its neighbor [closed]将一个字段移到它的邻居中[关闭]
【发布时间】:2020-03-19 09:06:01
【问题描述】:

我想合并数组中的一些嵌套对象,但没有指向元素编号,因为 CPU 编号可能会有所不同。 期望的输出可能是相似的。我想最终将度量和值作为一个对象,让我可以在一个日志行中呈现它。

有人可以帮帮我吗?

问候,杰

初始输出:

{
  "resultType": "vector",
  "result": [
    {
      "metric": {
        "cpu": "cpu10",
        "instance": "hostname-1",
        "job": "node",
        "mode": "iowait"
      },
      "value": [
        1584371948,
        66,
        "8,466666666790843"
      ]
    },
    {
      "metric": {
        "cpu": "cpu11",
        "instance": "hostname-1",
        "job": "node",
        "mode": "nice"
      },
      "value": [
        1584371948,
        66,
        "0"
      ]
    },
    {
      "metric": {
        "cpu": "cpu9",
        "instance": "hostname-1",
        "job": "node",
        "mode": "steal"
      },
      "value": [
        1584371948,
        66,
        "0"
      ]
    },
    {
      "metric": {
        "cpu": "cpu6",
        "instance": "hostname-1",
        "job": "node",
        "mode": "steal"
      },
      "value": [
        1584371948,
        66,
        "0"
      ]
    },
    {
      "metric": {
        "cpu": "cpu8",
        "instance": "hostname-1",
        "job": "node",
        "mode": "nice"
      },
      "value": [
        1584371948,
        66,
        "0"
      ]
    },
    {
      "metric": {
        "cpu": "cpu1",
        "instance": "hostname-1",
        "job": "node",
        "mode": "softirq"
      },
      "value": [
        1584371948,
        66,
        "1,233333333414824"
      ]
    },
    {
      "metric": {
        "cpu": "cpu4",
        "instance": "hostname-1",
        "job": "node",
        "mode": "guest"
      },
      "value": [
        1584371948,
        66,
        "0"
      ]
    }
  ]
}

期望的输出:

{
  "resultType": "vector",
  "result": [
    {
      "metric": {
        "cpu": "cpu10",
        "instance": "hostname-1",
        "job": "node",
        "mode": "iowait"
      "value": [
        1584371948,
        66,
        "8,466666666790843"
      ]
    },
    {
      "metric": {
        "cpu": "cpu11",
        "instance": "hostname-1",
        "job": "node",
        "mode": "nice"
      "value": [
        1584371948,
        66,
        "0"
      ]
    },
    {
      "metric": {
        "cpu": "cpu9",
        "instance": "hostname-1",
        "job": "node",
        "mode": "steal"
      "value": [
        1584371948,
        66,
        "0"
      ]
    },
    {
      "metric": {
        "cpu": "cpu6",
        "instance": "hostname-1",
        "job": "node",
        "mode": "steal"
      "value": [
        1584371948,
        66,
        "0"
      ]
    },
    {
      "metric": {
        "cpu": "cpu8",
        "instance": "hostname-1",
        "job": "node",
        "mode": "nice"
      "value": [
        1584371948,
        66,
        "0"
      ]
    },
    {
      "metric": {
        "cpu": "cpu1",
        "instance": "hostname-1",
        "job": "node",
        "mode": "softirq"
      "value": [
        1584371948,
        66,
        "1,233333333414824"
      ]
    },
    {
      "metric": {
        "cpu": "cpu4",
        "instance": "hostname-1",
        "job": "node",
        "mode": "guest"
      "value": [
        1584371948,
        66,
        "0"
      ]
    }
  ]
}

【问题讨论】:

  • 您应该显示一些您尝试过的代码,并在遇到问题时提出具体问题。
  • 我尝试了很多毫无意义的基本东西,在这里列出它们会让我感到尴尬。我对这种“编程”问题的逻辑思考几乎没有。努力学习...

标签: json jq


【解决方案1】:

为每个结果单独的值字段并将其添加到新对象中的度量;并用它们更新数组。

jq '.result[] |= {metric: (.metric + {value})}' file

【讨论】:

  • 哇!谢谢你。我很高兴也很伤心,因为我还没有接近开发这样的查询。
  • @Js_good 学习 JQ 的语法有点挑战性,但最终收获颇丰。不客气
猜你喜欢
  • 1970-01-01
  • 2017-04-07
  • 2013-01-24
  • 2021-07-11
  • 2013-11-22
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多