百色市网站建设_网站建设公司_Photoshop_seo优化
2026/1/17 3:20:46 网站建设 项目流程

🧭 说明

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询