📜  bash 解析 json - Javascript (1)

📅  最后修改于: 2023-12-03 14:59:30.060000             🧑  作者: Mango

Bash 解析 JSON - JavaScript

在 Bash 脚本中,我们经常需要解析 JSON 格式的数据。虽然 Bash 本身没有 JSON 解析器,但是我们可以借助一些工具来实现 JSON 解析的功能,比如 jq 和 json.sh 等。在本文中,我们将着重介绍 jq 工具的使用。

什么是 jq

jq 是一个轻量级的命令行 JSON 解析器。它可以方便地对 JSON 数据进行过滤、查询、转换和格式化等操作。

jq 安装

在 macOS 和 Linux 上,我们可以使用 Homebrew 或者包管理器(比如 apt-get、yum)来安装 jq:

# Homebrew 安装
brew install jq

# Ubuntu 安装
sudo apt-get install jq

# CentOS 安装
sudo yum install jq

如果你使用的是 Windows 系统,可以从官网上下载二进制文件进行安装。

jq 基本语法

jq 的基本语法为:

jq [options] filter [file...]

其中,filter 表示我们要使用的 jq 过滤器,在这里我们就可以实现 JSON 解析的功能了。file 表示要处理的 JSON 文件路径,如果没有指定就从标准输入读取 JSON 数据。

jq 过滤器

jq 过滤器是 jq 最重要的组成部分,它类似于 JavaScript 中的函数,用于处理 JSON 数据。

基本过滤器

我们先来看一些 jq 常见的基本过滤器:

  • .key:获取指定 key 的值
  • .[]:获取所有值
  • .[] | .key:获取所有子元素的指定 key 的值
  • .[]?:获取所有非空值
数组操作

我们还可以使用一些数组操作来对 JSON 数据进行处理:

  • .length:获取数组长度
  • .[index]:获取指定位置的元素
  • .[] | select(if .key == value then true else false end):筛选某个特定的元素
  • .[] | startswith("prefix"):获取以指定前缀开头的元素
条件语句

我们还可以在 jq 过滤器中使用条件语句:

  • if ... then ... else ... end:实现条件判断
  • map(if ... then ... else ... end):对数组中的每个元素进行条件判断
jq 示例

下面我们来看一些 jq 的实际使用示例。

示例一

假设有一个 JSON 文件,内容如下:

{
  "name": "Tom",
  "age": 26,
  "city": "Beijing",
  "languages": [
    "Java",
    "JavaScript",
    "Python"
  ]
}

我们可以使用 jq 过滤器来获取其中的某个值:

$ cat file.json | jq '.name'
"Tom"
示例二

我们还可以使用 jq 过滤器来对 JSON 数据进行格式化:

$ cat file.json | jq .
{
  "name": "Tom",
  "age": 26,
  "city": "Beijing",
  "languages": [
    "Java",
    "JavaScript",
    "Python"
  ]
}
示例三

我们还可以使用 jq 的数组操作来获取数组中的指定元素:

$ cat file.json | jq '.languages[0]'
"Java"
示例四

我们还可以使用 jq 的条件语句来筛选特定的元素:

$ cat file.json | jq '.languages[] | select(.startswith("Java"))'
"Java"
总结

通过上述示例,我们可以看到 jq 工具的强大功能。它可以方便地对 JSON 数据进行过滤、查询、转换和格式化等操作,是 Bash 脚本中不可或缺的工具之一。