📜  linux 中的 jq 命令 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:32:41.281000             🧑  作者: Mango

Linux中的jq命令 - Shell-Bash

在Linux中,处理JSON数据是一个非常常见的任务。很多情况下,我们需要通过过滤和转换JSON数据来满足我们的需求。jq命令是一个非常好用的命令行工具,可以让我们更容易地从JSON数据中提取信息。

安装jq命令

在大多数Linux发行版中,jq命令已经预先安装了。如果您的系统中没有安装,可以使用以下命令进行安装:

# Ubuntu或Debian系统
sudo apt-get install jq

# Red Hat或CentOS系统
sudo yum install jq
使用jq命令
基本用法

jq命令使用起来非常简单。我们可以将JSON数据直接传递给jq命令,并通过jq命令的过滤器获得想要的结果。例如,以下是一个JSON数据:

{
    "name": "Bob",
    "age": 30,
    "hobbies": ["swimming", "reading", "coding"],
    "address": {
        "street": "123 Main St",
        "city": "New York",
        "state": "NY",
        "zip": "10001"
    }
}

如果我们想要获取这个JSON数据中的"age"字段,可以使用以下命令:

$ echo '{"name":"Bob","age":30}' | jq '.age'

输出结果为:

30
过滤器

在jq命令中,最强大的功能之一就是过滤器。过滤器是一个小型的jq程序,可以将JSON数据从一个格式转换成另一个格式。以下是一些基本的过滤器:

  • .:表示当前对象
  • []:获取数组中指定索引的元素
  • {}:获取对象中的属性

例如,如果我们想要获取以上JSON数据中的"hobbies"数组中的第一个元素,可以使用以下命令:

$ echo '{"name":"Bob","age":30,"hobbies":["swimming","reading","coding"]}' | jq '.hobbies[0]'

输出结果为:

"swimming"

如果我们想要获取以上JSON数据中的"address"对象中的"city"属性,可以使用以下命令:

$ echo '{"name":"Bob","age":30,"address":{"street":"123 Main St","city":"New York","state":"NY","zip":"10001"}}' | jq '.address.city'

输出结果为:

"New York"
进一步操作

除了基本的过滤器,jq命令还提供了许多其他功能,例如转换、排序、过滤、拼接等等。以下是一些常见的操作:

  • length:获取数组的长度
  • map:将数组中的每一个元素都进行指定操作
  • select:根据条件过滤对象或数组中的元素
  • sort_by:根据指定属性对对象数组中的元素进行排序

例如,如果我们想要获取以上JSON数据中"hobbies"数组的长度,可以使用以下命令:

$ echo '{"name":"Bob","age":30,"hobbies":["swimming","reading","coding"]}' | jq '.hobbies | length'

输出结果为:

3

如果我们想要将以上JSON数据中"hobbies"数组中的每一个元素都转换成大写字母,可以使用以下命令:

$ echo '{"name":"Bob","age":30,"hobbies":["swimming","reading","coding"]}' | jq '.hobbies | map(ascii_upcase)'

输出结果为:

[
  "SWIMMING",
  "READING",
  "CODING"
]

以上就是jq命令的基本使用方法,可以更方便地处理JSON数据。欢迎尝试!