jq 进阶:复杂查询和转换
本本分分做人,踏踏实实做事!!!
前言
在网络 WEB 开发中我们经常使用的数据格式无非是 JSON、XML 两种数据结构。其他的结构基本上没啥人在使用吧。而 `JSON` 应该是更加适合初学者使用。他的 `dot` 获取数据的结构非常的方便。
但是在 Linux 上处理 JSON 却非常的不方便,因为 Linux 的处理逻辑还停留在二维文本结构上,类似于 JSON 这个高语法结构的文本,linux 处理起来就非常的捉襟见肘。 当涉及到处理 JSON 数据时,Linux jq 命令是一个非常有用的工具,它可以帮助你从命令行中轻松地提取、过滤和转换 JSON 数据。本文将为你总结一些 jq 的常见用法和示例,帮助你更好地理解和使用这个强大的工具。
什么是jq?
jq
就是我们Java
中的FastJson
,更加确切的说他类似于JSONPATH
路径法。他可以让我们很轻松的从一个 JSON 串中提取一部分或者符合我们要求的子串内容。Linux
上文本通过awk
、sed
, 在结合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 表达式和示例:
-
** JSON 整体数据
$
:**- 表达式:
$
- 示例:表示整个 JSON 对象。
- 表达式:
-
属性访问符
.
:- 表达式:
$[.property]
- 示例:
$.userName
表示访问 JSON 对象中的 "userName" 属性。
- 表达式:
-
递归下级元素
..
:..
类似于XPATH
中的//
,表示递归的意思。- 表达式:
$..property
- 示例:
$..name
表示查找所有嵌套结构中的 "name" 属性。
- 表达式:
-
通配符
*
:- 表达式:
$.array[*]
- 示例:
$.users[*]
表示访问数组 "users" 中的所有元素。
- 表达式:
-
支持方括号
[]
进行下标和条件过滤:- 表达式:
$[index]
或$[start:end]
或$[?(expression)]
- 示例:
$[0]
表示访问数组的第一个元素。$[1:3]
表示访问数组的第二到第四个元素。$[?(@.age > 18)]
表示查找年龄大于 18 的元素。
- 表达式:
-
使用
@
表示当前节点:- 表达式:
@.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
转载自:https://juejin.cn/post/7310571761044045887