jq 速查手册:核心语法与实战案例 jq 速查手册核心语法与实战案例用命令行处理 JSON 数据是不是让你觉得头疼今天我将通过一系列具体问题和实战案例带你快速掌握 jq 这个强大而灵活的 JSON 处理工具让你在数据处理上更加得心应手。如何选择 JSON 文件中的特定值假设你有一个 JSON 文件data.json内容如下{ name: Alice, age: 25, city: New York }你想要提取name和age的值可以使用以下命令jq .name, .age data.json这条命令使用了点操作符.来选择 JSON 对象中的特定键。jq会分别输出name和age的值。如何过滤 JSON 数组中的特定元素假设你有一个 JSON 文件users.json内容如下[ { name: Alice, age: 25 }, { name: Bob, age: 30 }, { name: Charlie, age: 20 } ]你想要筛选出年龄大于 25 的用户可以使用以下命令jq .[] | select(.age 25) users.jsonjq .[]用于遍历数组中的每个元素select(.age 25)则用于筛选出符合条件的元素。如何提取 JSON 对象中的多个字段假设你有一个 JSON 文件data.json内容如下{ name: Alice, age: 25, city: New York, email: aliceexample.com }你想要同时提取name和email字段可以使用以下命令jq {name, email} data.json{name, email}用于创建一个新的 JSON 对象只包含name和email字段。如何处理嵌套 JSON假设你有一个嵌套的 JSON 文件data.json内容如下{ user: { name: Alice, age: 25, address: { city: New York, zipcode: 10001 } } }你想要提取user对象中的name和address对象中的city可以使用以下命令jq .user | {name: .name, city: .address.city} data.json.user用于选择嵌套的user对象然后在其内部使用{name: .name, city: .address.city}来提取所需的字段。如何将 JSON 数组转换为 CSV 格式假设你有一个 JSON 文件users.json内容如下[ { name: Alice, age: 25 }, { name: Bob, age: 30 }, { name: Charlie, age: 20 } ]你想要将这个数组转换为 CSV 格式可以使用以下命令jq -r .[] | [.name, .age] | csv users.json-r选项用于输出原始字符串csv将 JSON 数组转换为 CSV 格式。如何在 JSON 数据中进行数学运算假设你有一个 JSON 文件data.json内容如下{ price: 100, quantity: 5, tax: 0.08 }你想要计算总金额total包括税可以使用以下命令jq (.price * .quantity) (.price * .quantity * .tax) data.json(.price * .quantity) (.price * .quantity * .tax)进行数学运算计算总金额。如何将多个 JSON 文件合并为一个文件假设你有两个 JSON 文件data1.json和data2.json内容如下data1.json:{ name: Alice, age: 25 }data2.json:{ city: New York, email: aliceexample.com }你想要将这两个文件合并为一个 JSON 对象可以使用以下命令jq -s .[0] * .[1] data1.json data2.json-s选项将多个输入文件合并为一个数组.[0] * .[1]将数组中的第一个和第二个对象合并成一个新的对象。如何处理 JSON 数据中的条件语句假设你有一个 JSON 文件data.json内容如下{ name: Alice, age: 25 }你想要根据age字段输出不同的信息可以使用以下命令jq if .age 25 then Adult else Young end data.jsonif .age 25 then Adult else Young end是一个条件语句根据age的值输出不同的文本。如何处理 JSON 数据中的数组和对象组合假设你有一个 JSON 文件data.json内容如下{ users: [ { name: Alice, age: 25 }, { name: Bob, age: 30 } ], city: New York }你想要提取每个用户的name和整个对象的city字段可以使用以下命令jq .users[] | {name: .name, city: .city} data.json.users[]用于遍历users数组中的每个对象然后使用{name: .name, city: .city}提取所需字段注意city字段是整个对象的一部分。如何处理 JSON 数据中的复杂路径假设你有一个嵌套的 JSON 文件data.json内容如下{ user: { name: Alice, age: 25, orders: [ { product: Laptop, price: 1000 }, { product: Phone, price: 500 } ] } }你想要提取所有订单的product和price字段可以使用以下命令jq .user.orders[] | {product: .product, price: .price} data.json.user.orders[]用于遍历嵌套的orders数组中的每个对象然后使用{product: .product, price: .price}提取所需字段。如何将 JSON 数据中的字符串转换为数字假设你有一个 JSON 文件data.json内容如下{ name: Alice, age: 25 }你想要将age字段从字符串转换为数字可以使用以下命令jq .age | tonumber data.json.age | tonumber使用tonumber函数将age字段的值从字符串转换为数字。如何处理 JSON 数据中的 null 值假设你有一个 JSON 文件data.json内容如下{ name: Alice, age: null }你想要将age字段的null值替换为 0可以使用以下命令jq .age | if . null then 0 else . end data.json.age | if . null then 0 else . end使用条件语句将null值替换为 0。如何处理 JSON 数据中的多个条件假设你有一个 JSON 文件data.json内容如下{ name: Alice, age: 25, status: active }你想要根据age和status字段输出不同的信息可以使用以下命令jq if .age 25 and .status active then Senior Active User elif .age 25 then Senior User elif .status active then Active User else User end data.jsonif .age 25 and .status active then Senior Active User elif .age 25 then Senior User elif .status active then Active User else User end使用多个条件语句来处理复杂的逻辑。如何将 JSON 数据中的数组扁平化假设你有一个 JSON 文件data.json内容如下{ users: [ { name: Alice, age: 25 }, { name: Bob, age: 30 } ] }你想要将users数组中的所有对象扁平化为一个数组可以使用以下命令jq .users[] data.json.users[]用于遍历users数组中的每个对象输出一个扁平化的数组。如何将 JSON 数据中的字段重命名假设你有一个 JSON 文件data.json内容如下{ name: Alice, age: 25 }你想要将name字段重命名为username可以使用以下命令jq .username .name | del(.name) data.json.username .name将name字段的值赋给usernamedel(.name)删除name字段。如何将 JSON 数据中的字段值增加一个固定值假设你有一个 JSON 文件data.json内容如下{ name: Alice, age: 25 }你想要将age字段的值增加 5可以使用以下命令jq .age 5 data.json.age 5使用操作符将age字段的值增加 5。如何将 JSON 数据中的字段值转换为大写假设你有一个 JSON 文件data.json内容如下{ name: Alice, age: 25 }你想要将name字段的值转换为大写可以使用以下命令jq .name | ascii_upcase data.json.name | ascii_upcase使用ascii_upcase函数将name字段的值转换为大写。如何将 JSON 数据中的字段值转换为小写假设你有一个 JSON 文件data.json内容如下{ name: ALICE, age: 25 }你想要将name字段的值转换为小写可以使用以下命令jq .name | ascii_downcase data.json.name | ascii_downcase使用ascii_downcase函数将name字段的值转换为小写。如何将 JSON 数据中的字段值格式化为指定格式假设你有一个 JSON 文件data.json内容如下{ name: Alice, age: 25 }你想要将age字段的值格式化为 年龄: 25可以使用以下命令jq {name: .name, age: 年龄: (.age | tostring)} data.json年龄: (.age | tostring)使用tostring函数将age字段的值转换为字符串然后拼接成所需的格式。如何将 JSON 数据中的字段值按指定条件排序假设你有一个 JSON 文件users.json内容如下[ { name: Alice, age: 25 }, { name: Bob, age: 30 }, { name: Charlie, age: 20 } ]你想要按age字段从小到大排序可以使用以下命令jq . | sort_by(.age) users.jsonsort_by(.age)使用sort_by函数按age字段排序。如何将 JSON 数据中的字段值按指定条件分组假设你有一个 JSON 文件users.json内容如下[ { name: Alice, age: 25, gender: female }, { name: Bob, age: 30, gender: male }, { name: Charlie, age: 20, gender: male } ]你想要按gender字段分组可以使用以下命令jq group_by(.gender) | map({gender: .[0].gender, users: .[] | {name: .name, age: .age}}) users.jsongroup_by(.gender)使用group_by函数按gender字段分组map用于处理每个分组的结果{gender: .[0].gender, users: .[] | {name: .name, age: .age}}创建新的 JSON 对象。如何将 JSON 数据中的字段值进行聚合计算假设你有一个 JSON 文件orders.json内容如下[ { product: Laptop, price: 1000 }, { product: Phone, price: 500 }, { product: Tablet, price: 300 } ]你想要计算所有订单的总价可以使用以下命令jq [.[] | .price] | add orders.json[.[] | .price]提取price字段的值并创建一个数组add函数对数组中的值进行求和。需要更多工具来辅助你的数据处理工作吗如果你在处理 JSON 数据时还需要生成 Cron 表达式、正则表达式或者进行时间戳转换等操作不妨试试 Hey Cron。这个免费的在线工具网站提供了 Cron 表达式生成器中文描述秒转 cron、正则表达式生成器、中英互译、JSON 格式化、Base64 编码解码和时间戳转换等多种实用工具帮助你高效完成各种任务。