news 2026/6/10 22:41:16

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/6/10 22:36:48

自动化工作流设计:Qwen3-4B-Instruct-2507+chainlit集成方案

自动化工作流设计:Qwen3-4B-Instruct-2507chainlit集成方案 1. 技术背景与应用场景 随着大模型在企业级应用中的深入落地,构建高效、可扩展的自动化工作流成为提升AI服务响应能力的关键。传统的大模型调用方式往往依赖于手动接口测试或简单的脚本封装&…

作者头像 李华
网站建设 2026/6/10 18:28:21

Qwen3-4B多模态体验:云端环境全配好,打开就用

Qwen3-4B多模态体验:云端环境全配好,打开就用 你是不是也遇到过这种情况?作为一名设计师,想测试一下当前热门的AI大模型对图片的理解能力,比如让它分析设计稿风格、识别图像元素、甚至根据草图生成文案。但一上手就卡…

作者头像 李华
网站建设 2026/6/10 22:30:28

Redis:为什么是它成为你的最佳选择?

文章目录Redis最适合的场景?什么是Redis?Redis最适合的场景:缓存1. 缓存:及时行乐,Redis的第一性原理Redis缓存的常见模式Redis缓存的优势2. 消息队列:Redis也能当个靠谱的“邮差”Redis作为消息队列的特点…

作者头像 李华
网站建设 2026/6/10 13:20:43

Fun-ASR vs Qwen3-ASR vs Dolphin实测对比:云端GPU 2小时搞定选型

Fun-ASR vs Qwen3-ASR vs Dolphin实测对比:云端GPU 2小时搞定选型 你是不是也遇到过这样的情况?老板突然说:“我们智能客服系统要上语音识别功能,下周给个方案。”产品经理一头雾水——市面上语音识别模型这么多,到底…

作者头像 李华
网站建设 2026/6/10 15:02:29

ESP32 Arduino环境搭建中CP2102驱动安装实战

ESP32开发第一步:搞定CP2102驱动,打通串口“任督二脉” 你有没有过这样的经历?兴冲冲地买回一块ESP32开发板,装好Arduino IDE,连上USB线——结果却发现电脑根本识别不了设备。打开设备管理器,要么啥都没出…

作者头像 李华
网站建设 2026/6/10 16:59:22

树莓派pico实现语音控制风扇的完整示例

用树莓派Pico打造一个真正“听懂你话”的风扇你能想象吗?一个不到30元的设备,能听懂你说“打开风扇”,然后真的转起来——而且全程不联网、不上传语音、响应比智能音箱还快。这不是什么黑科技,而是我最近用树莓派Pico LD3320语音…

作者头像 李华