JQ嵌套对象构造场景下深层键提取是否存在可用的快捷语法?
jq 嵌套层级键提取简化语法说明
问题背景
根据 jq 官方《Types And Values》文档的对象构造规则,单层键提取可以使用{foo}这类快捷语法,直接从输入 JSON 中仅保留 foo 字段,自动移除其他外层键。
现有如下示例 JSON:
{ "foo": { "bar": { "value": 42, "valid": true }, "valid": false }, "valid": false }
如果需要仅保留.foo.bar对象且维持原有层级结构(即移除外层valid和.foo.valid字段),目前常规写法为{ "foo": { "bar": .foo.bar } }。
常见疑问解答
是否存在更简化的快捷语法?
存在,稳定可用的简化写法为:
{foo: .foo | {bar}}
该写法利用管道先定位到.foo对象,再通过单层快捷语法提取内部的bar字段,最终输出和完整嵌套写法完全一致。
能否支持类似{foo.bar}的简写形式?
截至 jq 1.7 稳定版本,暂不支持这类嵌套路径的简写语法。{foo.bar}会被 jq 解析为「提取键名为foo.bar的顶层字段」,等效于{"foo.bar": .["foo.bar"]},完全不符合保留嵌套层级的需求。
内容的提问来源于stack exchange,提问作者0stone0
相关产品推荐
相关产品推荐

