Linux下用jq解析JSON:简化字段查询及多字段提取方法
当然有更简洁的写法,同时一次性提取多个字段也完全没问题,我来给你拆解一下:
更简洁的写法
你当前的命令用到了cat加管道传递内容给jq,其实jq本身就支持直接读取文件路径,完全可以去掉多余的cat操作,简化成:
jq '.title[].type[].properties.firstname' x.json
这样既减少了一个管道调用,让命令更简洁,也稍微提升了执行效率。
一次性提取多个字段
如果要同时提取firstname、lastname(或者其他任意多个字段),可以根据你想要的输出格式选择不同的写法:
输出结构化JSON对象(推荐,可读性强)
先通过|把properties节点单独抽出来,然后直接构造包含目标字段的JSON对象:
jq '.title[].type[].properties | {firstname, lastname}' x.json
这种写法会输出一组组独立的JSON对象,每个对象对应一组字段,示例输出:
{ "firstname": "Alice", "lastname": "Smith" } { "firstname": "Bob", "lastname": "Jones" }
输出JSON数组形式
如果希望每组字段以数组的形式输出(比如只需要纯值列表),可以写成:
jq '.title[].type[].properties | [.firstname, .lastname]' x.json
对应的输出会是:
["Alice", "Smith"] ["Bob", "Jones"]
聚合所有结果到一个大数组
如果需要把所有提取到的字段结果统一包裹在一个数组里(方便后续批量处理),可以在外层加上数组构造符[]:
jq '[.title[].type[].properties | {firstname, lastname}]' x.json
输出会是一个包含所有对象的数组:
[ { "firstname": "Alice", "lastname": "Smith" }, { "firstname": "Bob", "lastname": "Jones" } ]
内容的提问来源于stack exchange,提问作者artemisia480
相关产品推荐
相关产品推荐

