JQ:如何根据正则表达式删除键?

GGG*_*rce 1 json jq

我想删除所有以“隐藏”开头的键。重要的是要注意键可以嵌套在多个级别。我想使用正则表达式查看答案,尽管我认识到在我的示例中一个简单的contains就足够了。(我也不知道如何contains使用 BTW。)

输入 JSON 1:

{
  "a": 1,
  "b": 2,
  "hideA": 3,
  "c": {
    "d": 4,
    "hide4": 5
  }
}
Run Code Online (Sandbox Code Playgroud)

所需的输出 JSON:

{
  "a": 1,
  "b": 2,
  "c": {
    "d": 4
  }
}
Run Code Online (Sandbox Code Playgroud)

输入 JSON 2:

{
  "a": 1,
  "b": 2,
  "hideA": 3,
  "c": {
    "d": 4,
    "hide4": 5
  },
  "e": null,
  "f": "hiya",
  "g": false,
  "h": [{
    "i": 343.232,
    "hide9": "private",
    "so_smart": true
  }]
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Jef*_*ado 5

由于您只是检查键的开头,因此startswith/1在这种情况下可以使用,否则可以使用test/1test/2。然后您可以将要删除的路径传递给delpaths/1.

您可能希望事先按字符串过滤键(或转换为字符串)以说明树中的数组。

delpaths([paths | select(.[-1] | strings | startswith("hide"))])
Run Code Online (Sandbox Code Playgroud)
delpaths([paths | select(.[-1] | strings | test("^hide"; "i"))])
Run Code Online (Sandbox Code Playgroud)