【问题标题】:Use jq to extract some values from an array to top level, leaving the array intact使用 jq 从数组中提取一些值到顶层,保持数组不变
【发布时间】:2021-08-10 13:56:05
【问题描述】:

我有这种格式的数据:

{
  "searchResult": [
    {
      "key": "common1",
      "value": "A string"
    },
    {
      "key": "common2",
      "value": "2149944"
    },
    {
      "key": "varying1",
      "value": "604516"
    },
    {
      "key": "varying73",
      "value": "58.92"
    }
  ]
}

在 searchResult 中有一些经常出现的字段(时间戳、标识符等)。其他键不断变化,可以命名任何东西。我需要将它们转换为下面的格式,将预定义的常量键拉到顶层,变量键保留在 searchResult 数组中。

{
  "common1": "A string",
  "common2": "2149944",
  "searchResult": [
    {
      "key": "varying1",
      "value": "604516"
    },
    {
      "key": "varying73",
      "value": "58.92"
    }
  ]
}

看到jq已经在这个过程中使用了,请问如何在jq中进行这种转换?

我尝试使用 .name 提取值,但没有设法将它们带到这个顶级。

非常感谢

【问题讨论】:

  • 请向我们展示您的尝试。
  • 太离谱了!以至于我认为 .name 是内置的,而不仅仅是我正在复制的示例的列名。

标签: arrays extract jq


【解决方案1】:

您可以使用IN/1,如下所示:

(.searchResult | (from_entries | {common1, common2})) + { searchResult }
| .searchResult |= map(select(.key | IN("common1", "common2") | not))

【讨论】:

  • 一直在摸不着头脑,为什么它不能在 Google Cloud Shell 上运行,因为我有必要的网络速度来处理大文件。那是运行 jq 1.5-1 并返回 'jq: error: IN/1 is not defined at , line 1:'
  • 你可以添加它的def,可以在github.com/stedolan/jq/blob/master/src/builtin.jq找到
猜你喜欢
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 2023-01-04
相关资源
最近更新 更多