给定以下输入
[
{
"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"
和"b"
之外的所有键,并保留原始的JSON结构。
但是请注意,原始对象可能有几十个键,我只想保留其中的2或3个。
对于简单的顶层操作,我能够选择具有{a:.a, b:.b}
或{a,b}
语法的对象子集,但在嵌套上下文中,我不知道如何继续并保留JSON结构。
一般来说,在不改变父级别的情况下,在嵌套很深的级别上执行操作的最佳态度是什么?
3条答案
按热度按时间dbf7pr2w1#
简而言之,
walk
是您的朋友。(If它在你jq中是不可用的,只要把它的def包含在你的jq程序中;def可以很容易地通过google找到:jq def walk)
下面的一些变化应该可以解决眼前的问题:
bnl4lu3b2#
您可以使用
|=
操作符在嵌套级别上执行您想要的操作。还有一个相当简单的函数可以用来从json对象中选择特定的路径。
This stackoverflow.com thread有更深入的解释。
nkhmeac63#
也许这对你有用:
test1
或者这个:
test2