likes
comments
collection
share

jq 进阶:复杂查询和转换

作者站长头像
站长
· 阅读数 7

本本分分做人,踏踏实实做事!!!

前言

在网络 WEB 开发中我们经常使用的数据格式无非是 JSONXML 两种数据结构。其他的结构基本上没啥人在使用吧。而 `JSON` 应该是更加适合初学者使用。他的 `dot` 获取数据的结构非常的方便。
但是在 Linux 上处理 JSON 却非常的不方便,因为 Linux 的处理逻辑还停留在二维文本结构上,类似于 JSON 这个高语法结构的文本,linux 处理起来就非常的捉襟见肘。

当涉及到处理 JSON 数据时,Linux jq 命令是一个非常有用的工具,它可以帮助你从命令行中轻松地提取、过滤和转换 JSON 数据。本文将为你总结一些 jq 的常见用法和示例,帮助你更好地理解和使用这个强大的工具。

什么是jq?

  • jq 就是我们 Java 中的 FastJson ,更加确切的说他类似于 JSONPATH 路径法。他可以让我们很轻松的从一个 JSON 串中提取一部分或者符合我们要求的子串内容。
  • Linux 上文本通过 awksed , 在结合 jq

安装jq

在大多数Linux发行版中,jq是可用的。你可以使用包管理器来安装它。例如,在Ubuntu上,你可以运行以下命令来安装jq:

bashCopy code
sudo apt-get install jq

JSONPATH

  • JSONPATH XPATH 一样都是一种寻找语法。通过他我们能快速的抽离 JSON。

  • 表达式:$.data.forecast[*].type 获取值为:["多云","中到大雨","多云","小雨","多云"]

  • JSONPath 是一种用于从 JSON 数据中提取信息的查询语言。它类似于 XPath 用于 XML 数据的查询。JSONPath 允许你通过路径表达式定位和访问 JSON 对象中的特定元素。以下是一些基本的 JSONPath 表达式和示例:

  1. ** JSON 整体数据 $:**

    • 表达式:$
    • 示例:表示整个 JSON 对象。
  2. 属性访问符 .

    • 表达式:$[.property]
    • 示例:$.userName 表示访问 JSON 对象中的 "userName" 属性。
  3. 递归下级元素 .. .. 类似于 XPATH 中的 // ,表示递归的意思。

    • 表达式:$..property
    • 示例:$..name 表示查找所有嵌套结构中的 "name" 属性。
  4. 通配符 *

    • 表达式:$.array[*]
    • 示例:$.users[*] 表示访问数组 "users" 中的所有元素。
  5. 支持方括号 [] 进行下标和条件过滤:

    • 表达式:$[index]$[start:end]$[?(expression)]
    • 示例:
      • $[0] 表示访问数组的第一个元素。
      • $[1:3] 表示访问数组的第二到第四个元素。
      • $[?(@.age > 18)] 表示查找年龄大于 18 的元素。
  6. 使用@表示当前节点:

    • 表达式:@.property
    • 示例:@.name 表示当前节点的 "name" 属性。

jq的基本用法

1. 查看JSON数据

使用jq最简单的方法是将其传递给一个JSON文件,然后使用.运算符来访问JSON对象的属性。例如:

bashCopy code
cat data.json | jq .key

这将返回JSON数据中名为"key"的属性的值。

2. 过滤数据

你可以使用jq来过滤JSON数据,只显示你感兴趣的部分。例如,如果你只想查看一个数组中的前3个元素:

bashCopy code
cat data.json | jq '.array[:3]'

3. 遍历数组

如果JSON数据包含一个数组,你可以使用[]来遍历数组的元素。例如,要列出数组中的所有元素:

bashCopy code
cat data.json | jq '.array[]'

4. 条件过滤

你可以使用条件来过滤JSON数据。例如,只显示特定条件下的对象:

bashCopy code
cat data.json | jq '.array[] | select(.age > 30)'

这将只显示年龄大于30的对象。

更高级的jq用法

1. 修改JSON数据

jq不仅可以查询数据,还可以修改它。例如,你可以使用|=来更新对象的属性:

bashCopy code
cat data.json | jq '.key |= "new value"'

2. 转换JSON格式

jq还可以用来将JSON数据转换为不同的格式,例如CSV。你可以使用@csv过滤器来实现:

bashCopy code
cat data.json | jq -r '.[] | @csv'

这将把JSON数据转换为CSV格式。

3. 合并JSON

你可以使用+运算符来合并多个JSON对象:

bashCopy code
cat data1.json | jq -s add data2.json

这将合并data1.json和data2.json中的JSON数据。

总结

jq是一个功能强大的命令行工具,用于处理JSON数据。它可以帮助你轻松地提取、过滤、转换和操作JSON数据,使其非常适合在Linux环境中进行JSON数据处理任务。这篇文章总结了一些jq的常见用法和示例,希望对你的工作有所帮助。不断练习和探索jq的功能,将使你更加熟练地使用这个工具。

放松一刻

Much though he recites the sacred texts, but acts not accordingly, that heedless man is like a cowherd who only counts the cows of others — The Buddha

jq 进阶:复杂查询和转换