json jq:选择对象的前两级[复制]

mklgxw1f  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(112)

此问题在此处已有答案

jq get x levels of keys and remove all the rest(3个答案)
4天前关闭。
我有一些json数据,如下所示:

{
    "a1": {
        "b1": {
            "c1": {...},
            "c2": [...]
        },
        "b2": {
            "c3": {...},
            "c4": [...]
        }
    },
    "a2": {
        "b3": {
            "c5": {...},
            "c6": [...]
        },
        "b4": {
            "c7": {...},
            "c8": [...]
        }
    }
}

我想将其转换为:

{
    "a1": {
        "b1": {},
        "b2": {}
    },
    "a2": {
        "b3": {},
        "b4": {}
    }
}

注意b是空对象,我可以得到一个b的数组列表:

cat testjq.json | jq '. | map_values(keys)'

但不知道如何将其Map到对象。

qpgpyjmq

qpgpyjmq1#

如果只想将第二级上的所有项目设置为空对象,请用途:

jq '.[][] = {}' some.json
{
  "a1": {
    "b1": {},
    "b2": {}
  },
  "a2": {
    "b3": {},
    "b4": {}
  }
}

Demo
注意:map_values定义为def map_values(f): .[] |= f;,因此.[][] = {}实际上与map_values(map_values({}))相同。

相关问题