jq 进阶:复杂查询和转换

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

前言

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

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

什么是jq?

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

安装jq

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

arduino 复制代码
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对象的属性。例如:

bash 复制代码
bashCopy code
cat data.json | jq .key

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

2. 过滤数据

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

bash 复制代码
bashCopy code
cat data.json | jq '.array[:3]'

3. 遍历数组

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

bash 复制代码
bashCopy code
cat data.json | jq '.array[]'

4. 条件过滤

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

scss 复制代码
bashCopy code
cat data.json | jq '.array[] | select(.age > 30)'

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

更高级的jq用法

1. 修改JSON数据

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

bash 复制代码
bashCopy code
cat data.json | jq '.key |= "new value"'

2. 转换JSON格式

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

css 复制代码
bashCopy code
cat data.json | jq -r '.[] | @csv'

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

3. 合并JSON

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

bash 复制代码
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

相关推荐
海宇AI21 分钟前
零信任架构实战:基于海宇柠檬查出险-登记证构建自动化车抵贷核保网关
java·人工智能·架构·自动化
陈陈CHENCHEN1 小时前
【Linux】服务器根目录磁盘扩容操作记录
linux·运维·服务器
Bs_MoneyMagnet1 小时前
基于springboot+vue的心理咨询预约与随访平台的设计与实现 源码+文档
vue.js·spring boot·后端·spring·毕业设计·旅游·计算机毕业设计
cfm_29142 小时前
单例模式详解
java
我叫张土豆2 小时前
本体论、DDD、SDD、TDD:AI 编程时代的四层认知栈
java·人工智能
IT_陈寒2 小时前
Vue的响应式更新把我坑惨了,原来问题出在这
前端·人工智能·后端
白远山2 小时前
家政服务家政社区派单实战:调度系统架构设计与实现指南
java·开发语言·小程序·架构·需求分析
海南java第二人2 小时前
从诞生到回收:JVM对象生命周期与垃圾回收全链路解析
java
GeW2 小时前
RHCE快速拿证全攻略:考点拆解+实验强化+时间规划,一次通关
linux
SL_staff3 小时前
JVS-Logic:从页面配置工具到企业级业务逻辑中枢的技术演进
java·算法·全栈