Linux jq 命令讲解与实战操作

原创
admin 2小时前 阅读数 5 #Linux
文章标签 Linux

Linux jq 命令讲解与实战操作

jq 是一个轻量级且灵活的命令行 JSON 处理器,它允许用户从命令行或脚本中查询、转换和处理 JSON 数据。jq 的语法类似于表达式语言,让它非常适合进行 JSON 数据的过滤、转换和输出。下面我们将对 jq 命令进行详细的讲解,并提供一些实战操作案例。

1. jq 简介

jq 的设计目标是易懂、飞速,并且能够轻松地处理大型 JSON 数据。它可以在 Linux、macOS 和 Windows 等操作系统上运行。jq 可以直接从标准输入读取 JSON 数据,也可以从文件读取,处理完毕后将最终输出到标准输出或文件中。

2. jq 基本语法

jq 的基本语法如下:

jq [options] [jqfilter] [file]

其中:

  • options:可选的命令行选项,用于控制 jq 的行为。
  • jqfilter:一个或多个 jq 表达式,用于过滤、转换或输出 JSON 数据。
  • file:可选的文件名,jq 将从该文件读取 JSON 数据。

3. jq 常用选项

以下是一些常用的 jq 选项:

  • -c:压缩输出,移除不必要的空白字符。
  • -M:将 JSON 输出为多行格式。
  • -r:将 JSON 输出为纯文本,移除引号。
  • -S:输出时,将空数组输出为空字符串。
  • -s:将标准输入视为一个 JSON 数组。

4. jq 表达式

jq 表达式是 jq 的核心,它允许用户从 JSON 数据中提取、修改或创建新的数据。以下是一些常见的 jq 表达式类型:

4.1. 基本选择器

基本选择器用于选择 JSON 对象或数组中的特定元素。以下是一些基本选择器的示例:

.key          # 选择对象中的 key

.keys # 选择对象的所有键

.values # 选择对象的所有值

.[].key # 选择数组中每个对象的 key

.keys[] # 选择数组中每个对象的键

.values[] # 选择数组中每个对象的值

4.2. 过滤器

过滤器用于从 JSON 数据中筛选出符合条件的元素。以下是一些过滤器示例:

filter (.value == "someValue")        # 筛选出 value 等于 "someValue" 的元素

select (.value != "someValue") # 筛选出 value 不等于 "someValue" 的元素

unique | length # 选择唯一元素的数量

4.3. 转换

转换用于修改 JSON 数据的结构或内容。以下是一些转换示例:

map(.key = "newValue")                 # 将每个对象的 key 替换为 "newValue"

map([.key, .value]) # 将对象演化为包含键和值的数组

reduce([]; . |= .[]) # 将数组中的所有元素合并为一个数组

5. 实战操作

以下是一些使用 jq 的实战操作案例:

5.1. 从 JSON 数据中提取特定值

假设我们有一个 JSON 文件 data.json,内容如下:

{

"name": "John",

"age": 30,

"address": {

"street": "123 Main St",

"city": "Anytown"

}

}

要提取 John 的年龄,可以使用以下 jq 表达式:

echo '{"name": "John", "age": 30, "address": {"street": "123 Main St", "city": "Anytown"}}' | jq '.age'

5.2. 处理 JSON 数组

假设我们有一个包含用户信息的 JSON 数组,内容如下:

[

{"name": "Alice", "age": 25},

{"name": "Bob", "age

本文由IT视界版权所有,禁止未经同意的情况下转发

热门