jq:从嵌套对象中选择子集键

4

输入:

{"success": true, "results": {"a":, "b":, "c":}}

假设我想保留b,期望的输出如下:

{"success": true, "results": {"b":}}

我尝试过的方法:

$ jq 'del(select(.results.b | not))'
{"success": true, "results": {"a": …, "b": …, "c": …}}
# removes nothing from "results"

$ jq 'with_entries(select(.key == "success" or .key == "results.b"))'
{"success": true}
# nested comparison not understood; returns only "success"

谢谢!

2个回答

5

以下是一个解决方案:

.results |= {b}

样例运行

$ jq -M '.results |= {b}' <<< '{"success":true, "results":{"a": "…", "b": "…", "c": "…"}}'
{
  "success": true,
  "results": {
    "b": "…"
  }
}

Try it online at jqplay.org


{btsdaf} - zopieux

0

另一种使用 的方法:

代码:

$ node<<EOF
var obj = $(</tmp/file.json);
delete obj.results.a;
delete obj.results.c;
console.log(JSON.stringify(obj));
EOF

输出:

{"success":true,"results":{"b":"bbb"}}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接