jq:从嵌套对象中选择键的子集
jq: selecting subset of keys from nested object
输入:
{"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"
谢谢!
代码:
$ 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"}}
这是一种解决方案:
.results |= {b}
样本运行
$ jq -M '.results |= {b}' <<< '{"success":true, "results":{"a": "…", "b": "…", "c": "…"}}'
{
"success": true,
"results": {
"b": "…"
}
}
输入:
{"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"
谢谢!
代码:
$ 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"}}
这是一种解决方案:
.results |= {b}
样本运行
$ jq -M '.results |= {b}' <<< '{"success":true, "results":{"a": "…", "b": "…", "c": "…"}}'
{
"success": true,
"results": {
"b": "…"
}
}