【问题标题】:Filtering JSON objects with jq使用 jq 过滤 JSON 对象
【发布时间】:2021-11-29 12:43:29
【问题描述】:

我有一个 JSON 文件,其中包含不需要的值。我想通过只选择我需要的或删除我不需要的来过滤它们。例如,我有这个 JSON 文件:

{
 { "id"    : "1",
   "key1"  : "val1",
   "key2"  : "val2",
   "name"  : "someone",
   "age"   : 39,
 },
 { "id"    : "1234",
   "key1"  : "val1",
   "key2"  : "val2",
   "name"  : "someone",
   "age"   : 39
},
{ "id"    : "4567",
  "key1"  : "val1",
  "key2"  : "val2",
  "name"  : "someone",
  "age"   : 60
 }
}

我的目标是通过使用 jq 命令递归删除所有 key1 和 key2 项来获得以下 JSON:

{
 { "id"    : "1",
   "name"  : "someone",
   "age"   : 39,
 },
 { "id"    : "1234",
   "name"  : "someone",
   "age"   : 39
},
{ "id"    : "4567",
  "name"  : "someone",
  "age"   : 60
 }
}

谢谢。

【问题讨论】:

  • 请向我们展示您的尝试,并记住 Stack Overflow 不是编码服务。
  • 如果这应该是一个对象的数组,它应该有方括号:[{…},{…},{…}]
  • @Ben B. 您已编辑此问题,将所有出现的 jq 更改为 JQuery(这是完全不同的)。基于 OP @Chloe 之前的问题(到目前为止,这些问题都是关于 jq),我怀疑 JQuery 是否打算在这里。
  • @chloe - 您的 Q 声明您有一个 JSON 文件,但您提供的示例既不是有效的 JSON,也不是有效的 JSON 实体流。请修复。

标签: json jq


【解决方案1】:

如果输入应该是对象数组(然后将其格式化为[{…},{…},{…}]),您可以使用map 对数组的每个元素应用过滤器或新格式。

构建你需要的东西 (Demo):

jq 'map({id,name,age})' 

或者删除你不需要的(Demo):

jq 'map(del(.key1,.key2))' 

两者都产生:

[
  {
    "id": "1",
    "name": "someone",
    "age": 39
  },
  {
    "id": "1234",
    "name": "someone",
    "age": 39
  },
  {
    "id": "4567",
    "name": "someone",
    "age": 60
  }
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    相关资源
    最近更新 更多