【发布时间】:2022-12-15 11:41:38
【问题描述】:
给定以下 JSON 对象:
{
"meta": {
"data1": {
"keep": "true"
}
},
"detail": {
"data2": [
{
"keep1": "keep1value",
"keep2": "keep2value",
"nokeep1": "abc"
}
],
"data3": [
{
"keep1": "keep1value",
"keep2": "keep2value",
"nokeep2": "abc"
}
]
},
"drop" : "this"
}
我试图通过删除不需要的字段来清理它,例如“remove”、“nokeep1”和“nokeep2”。 然而,“data2”和“data3”数组中的对象可能包含比示例“nokeepX”更多的字段,但将始终包含我想保留的“keep1”和“keep2”。
我想要的输出是以下 JSON:
{
"meta": { "data1": { "keep": "true" } },
"detail": {
"data1": [
{
"keep1": "keep1value",
"keep2": "keep2value"
}
],
"data2": [
{
"keep1": "keep1value",
"keep2": "keep2value"
}
]
}
}
我已经设法用这个查询删除了“drop”字段:jq 'def pick($paths): . as $root | reduce ($paths[]|[.]|flatten(1)) as $path ({}; . + setpath($path; $root|getpath($path))); pick([["meta"], ["detail", "data1"], ["detail", "data2"]])'
然而,我一直在努力弄清楚如何删除“nokeepX”字段——是否有可能做到这一点?
【问题讨论】:
-
data2和data3是如何变成data1和data2的?