过滤 json 以保留与键或值中任意位置的给定模式匹配的子内容

问题描述 投票:0回答:1

假设我有一个 json 文件。我想过滤此文件以仅输出给定模式出现在完整路径或叶节点值中的任何位置的内容。例如,假设 json 文件具有以下内容:

{
 "a": "foo",
 "b": "bar",
 "c": {
  "d": "foo",
  "e": "bar"
 },
 "aa": {
  "foo": [
   1,
   2,
   3
  ],
  "bar": {
   "foo": false
  }
 }
}

模式是“foo”。然后,输出应如下所示。

{
 "a": "foo",
 "c": {
  "d": "foo"
 },
 "aa": {
  "foo": [
   1,
   2,
   3
  ],
  "bar": {
   "foo": false
  }
 }
}

那么,

jq
命令应该是什么?

jq
1个回答
0
投票

您可以使用递归下降运算符

..
来查找所需的部分,并使用
del
函数来删除它们。根据“匹配模式”对您的含义,您可能需要更新条件的措辞,例如使用 正则表达式匹配
test
。为了简单起见,我在这里测试了相等性。

jq 'del(.. | select(. == "foo"))' input.json
{
  "b": "bar",
  "c": {
    "e": "bar"
  },
  "aa": {
    "foo": [
      1,
      2,
      3
    ],
    "bar": {
      "foo": false
    }
  }
}

演示

© www.soinside.com 2019 - 2024. All rights reserved.