在jq中,如何在各级选择想要的属性?

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

这似乎是一个非常基本的需求,但我在教程中找不到它

想象我们有一个像这样的对象:

{"data":[
  {"prop1":"a", "prop2":"b", "prop3":"c", "prop4":"d", "nestedprops":{"nestedprop1":"A","nestedprop2":"B"} },
  {"prop2":"b", "prop3":"c", "nestedprops":{"nestedprop1":"A"}},
  {"prop3":"c"}
]}

我只想要完全相同的json,但过滤掉prop3,prop4和nestedprop2, 或者换句话说,我想在整个树中过滤 prop1、prop2 和nestedprop1

{"data":[
  {"prop1":"a", "prop2":"b", "nestedprops":{"nestedprop1":"A"} },
  {"prop2":"b", "nestedprops":{"nestedprop1":"A"}},
  {}
]}

我正在尝试使用 jq '.data[] | {prop1,prop2,nestedprops:{nestedprop1}}'之类的但我找不到它

jq
1个回答
0
投票

我只想要完全相同的json,但过滤掉prop3,prop4和nestedprop2

通过删除要过滤掉的内容来更新数组中的每一项:

.data[] |= del(.prop3, .prop4, .nestedprops.nestedprop2)

演示

我想在整个树中过滤 prop1、prop2 和nestedprop1

通过选择您需要的内容来更新每个项目。使用

values
过滤非空值,并使用
//
默认为空对象。

.data[] |= (pick(.prop1, .prop2, .nestedprops.nestedprop1 | values) // {})

演示

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