news 2026/4/23 12:46:21

Linux命令-jq(能够高效地解析、过滤、查询和操作JSON数据)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux命令-jq(能够高效地解析、过滤、查询和操作JSON数据)

🧭 说明

jq是一个功能强大的命令行JSON处理器,能够高效地解析、过滤、查询和操作JSON数据。下面这个表格汇总了它的主要功能类别和常用命令。

功能类别常用命令/过滤器说明
基础查询.,.["key"],.[index]获取JSON数据本身、特定字段值或数组元素。
数组操作.[],.[index],.[start:end]展开数组、访问特定元素或进行切片。
数据筛选select(condition),map(expression)根据条件过滤数据,或对数组每个元素进行转换。
构造与转换{ },[ ],+=,del()创建新对象/数组,修改字段值或删除字段。
聚合计算length,keys,has("key"),add计算长度、获取键名、检查键存在性、求和等。
管道操作``

💡 核心功能详解

  • 格式化输出:最基本的用法是使用.过滤器,它可以将输入的JSON数据美观地打印出来。这在查看压缩在一行的JSON数据时特别有用。

    echo'{"name":"Alice","age":30}'|jq'.'
  • 提取特定字段:通过.fieldName可以直接获取对象中的字段值。对于嵌套结构,可以使用点号链式访问,如.user.profile.name。使用-r选项可以输出原始字符串(去掉JSON引号),方便直接在shell脚本中使用。

    echo'{"user":{"name":"Alice"}}'|jq -r'.user.name'# 输出:Alice
  • 操作JSON数组

    • 展开迭代:使用.[]可以将数组展开,使其中的每个元素独立地通过后续管道。
      echo'[{"name":"Alice"},{"name":"Bob"}]'|jq'.[]'
    • 条件筛选:结合select函数可以根据条件过滤数组元素。
      # 筛选出age大于25的对象echo'[{"name":"Alice","age":30},{"name":"Bob","age":20}]'|jq'.[] | select(.age > 25)'
    • 映射转换:使用map函数可以对数组中的每个元素应用相同的操作。
      # 提取所有对象的name字段,组成新数组echo'[{"name":"Alice"},{"name":"Bob"}]'|jq'map(.name)'
  • 构造与修改JSON:jq不仅可以查询,还能创建和修改JSON数据。

    • 构造新对象:使用{ }可以构造新的JSON对象。
      echo'{"firstName":"John","lastName":"Doe"}'|jq'{fullName: .firstName + " " + .lastName}'
    • 修改字段值:使用|=运算符可以更新字段的值。
      # 将version字段的值增加1jq'.version |= .+1'data.json
    • 删除字段:使用del函数可以删除指定的字段。
      jq'del(.tempData)'data.json

⚠️ 实用技巧与注意事项

  • 处理外部变量:在shell脚本中,可以使用--arg选项将shell变量传递给jq过滤器。

    name="Alice"echo'{}'|jq --arg n"$name"'.name = $n'
  • 控制输出格式:除了-r-c选项可以输出紧凑的单行JSON,适合日志记录。

  • 处理大型文件:处理非常大的JSON文件时,避免使用-s(slurp)选项一次性将整个文件读入内存,可以考虑使用--stream选项进行流式解析。

  • 错误处理:使用?操作符可以进行安全访问,当路径不存在时不会报错,而是返回null。结合//运算符可以提供默认值。

    jq'.maybeMissingKey? // "default value"'data.json
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 9:21:50

告别写作困难!用Qwen3-4B-Instruct一键生成高质量内容

告别写作困难!用Qwen3-4B-Instruct一键生成高质量内容 【免费下载链接】AI 写作大师 - Qwen3-4B-Instruct 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/Qwen3-4B-Instruct 导语:在内容创作日益高频的今天,如何高效产出逻辑清晰、…

作者头像 李华
网站建设 2026/4/23 16:52:03

终极RimSort模组管理指南:告别加载冲突的完整解决方案

终极RimSort模组管理指南:告别加载冲突的完整解决方案 【免费下载链接】RimSort 项目地址: https://gitcode.com/gh_mirrors/ri/RimSort 还在为《环世界》模组加载冲突而烦恼吗?当精心配置的殖民地因为模组加载顺序问题而崩溃时,那种…

作者头像 李华
网站建设 2026/4/10 7:43:15

3分钟掌握终极WZ文件编辑器:你的《冒险岛》游戏定制秘籍

3分钟掌握终极WZ文件编辑器:你的《冒险岛》游戏定制秘籍 【免费下载链接】Harepacker-resurrected All in one .wz file/map editor for MapleStory game files 项目地址: https://gitcode.com/gh_mirrors/ha/Harepacker-resurrected 想要彻底掌控《冒险岛》…

作者头像 李华
网站建设 2026/4/23 0:11:29

layui-admin:企业级权限管理系统的商业价值与技术实现

layui-admin:企业级权限管理系统的商业价值与技术实现 【免费下载链接】layui-admin 基于layui2.x的带后台的通用管理系统 项目地址: https://gitcode.com/gh_mirrors/la/layui-admin 在数字化转型浪潮中,企业管理系统已成为组织效率提升的核心引…

作者头像 李华
网站建设 2026/4/23 16:01:47

如何在Windows上获得最佳B站观影体验:BiliBili-UWP完整使用指南

如何在Windows上获得最佳B站观影体验:BiliBili-UWP完整使用指南 【免费下载链接】BiliBili-UWP BiliBili的UWP客户端,当然,是第三方的了 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBili-UWP 还在为Windows系统上观看B站视频的…

作者头像 李华
网站建设 2026/4/23 13:09:23

GoB插件终极指南:轻松打通Blender与ZBrush创作壁垒 [特殊字符]

GoB插件终极指南:轻松打通Blender与ZBrush创作壁垒 🎨 【免费下载链接】GoB Fork of original GoB script (I just added some fixes) 项目地址: https://gitcode.com/gh_mirrors/go/GoB 还在为Blender和ZBrush之间的模型转换而头疼吗&#xff1f…

作者头像 李华