json - 使用 jq 在深度嵌套的 JSON 中过滤对象的键
问题描述
给定以下输入
[
{
"k1":[{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6}],
"k2":[{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6}]
}
]
我应该如何继续获得以下输出?
[
{
"k1":[{"a":1,"b":2}],
"k2":[{"a":1,"b":2}]
}
]
即我在JSON中有一些对象,我想删除那些嵌套对象中除"a"
and之外的所有键"b"
,并保留原始JSON结构。
但是请注意,原始对象可能有几十个键,我只想保留其中的 2 或 3 个。
对于简单的顶级操作,我能够选择具有{a:.a, b:.b}
or{a,b}
语法的对象子集,但在嵌套上下文中,我不知道如何继续并保留 JSON 结构。
一般来说,在不改变父级的情况下,在深度嵌套级别上进行操作的最佳态度是什么?
解决方案
简而言之,walk
是你的朋友。
(如果它在你的 jq 中不可用,只需在你的 jq 程序中包含它的 def;通过谷歌搜索可以很容易地找到 def:jq def walk)
以下的一些变化应该可以解决眼前的问题:
walk( if type == "object" then {a,b} else . end )
推荐阅读
- c# - 为什么 ANTLR C# 自动生成的解析器不匹配 EOF?
- javascript - React Native,在 Render 中调用另一个函数
- docker - 带有 golang http.Get 错误“证书由未知机构签名”的 Docker 容器
- javascript - 如何操作多个数组中的相同元素
- c++ - 包含零的字符串初始化-> 编译器错误或预期行为?
- javascript - 对 HTML 文本/html 类型的变量引用
- git - Azure DevOps:如何停止可能破坏主分支的签入?
- html - PrimeNG Angular 10 - 如何在 p-autoComplete 中添加图标
- python - 列出垃圾箱内容显示为空
- powerbi - 共享 Power BI 仪表板 - 外部用户