jq常用命令

1. 点符号读取json字段

sh 复制代码
    yum install jq
    jq .ziduan1 file.json
    jq .ziduan1 *.json

2. 点符号读取json字段--字典套字典

sh 复制代码
    yum install jq
    jq .ziduan1.ziduan11 file.json

3. 点符号读取json字段--字典套列表再套字典 读取字典中所有的列表

sh 复制代码
    yum install jq
    jq '.ziduan1[].ziduan11' file.json

4. jq -r

jq -r 是 jq 命令的一个常用选项,其中:

-r 代表 --raw-output,作用是:

  1. 输出原始字符串(去除 JSON 字符串值的双引号)
  2. 避免 JSON 字符串中的特殊字符被转义
sh 复制代码
# 不加 -r(默认输出带引号)
echo '{"name":"John"}' | jq '.name'
# 输出: "John"

# 加 -r(直接输出原始值)
echo '{"name":"John"}' | jq -r '.name'
# 输出: John

5. 不输出为空的

只想在 .ziduan1.ziduan11字段不为空(null)时输出

sh 复制代码
accent=`jq -r '.ziduan1.ziduan11 // empty' $json_path`

// empty 是 jq 的空值处理运算符,表示当左侧值为 null 或 false 时返回空

这样只有当 ziduan1.ziduan11有实际值时才会输出

6. jq select 做条件判断

假设你有一个名为 data.json 的文件,内容如下:

过滤数组:

假设你的 JSON 文件包含一个数组,格式如下:

json 复制代码
{
  "users": [
    { "name": "John", "age": 30 },
    { "name": "Jane", "age": 25 },
    { "name": "Doe", "age": 35 }
  ]
}
  • 获取数组中的所有 name 值:

    bash 复制代码
    jq '.users[].name' data.json
  • 获取所有年龄大于 30 的用户:

    bash 复制代码
    jq '.users[] | select(.age > 30)' data.json
使用管道进行更复杂的操作:

你可以通过管道将多个 jq 操作结合起来,进行更复杂的查询和转换。

例如,从下面的 JSON 文件中提取出所有 nameage 字段,并以 JSON 格式输出:

json 复制代码
{
  "users": [
    { "name": "John", "age": 30 },
    { "name": "Jane", "age": 25 },
    { "name": "Doe", "age": 35 }
  ]
}
bash 复制代码
jq '.users[] | {name, age}' data.json

输出结果:

json 复制代码
{
  "name": "John",
  "age": 30
}
{
  "name": "Jane",
  "age": 25
}
{
  "name": "Doe",
  "age": 35
}
格式化输出:

使用 jq 时,默认情况下,它会自动格式化输出为易于阅读的格式。你也可以使用 -c 选项来输出压缩格式的 JSON(去除换行和缩进):

bash 复制代码
jq -c . data.json
相关推荐
库玛西32 分钟前
深入浅出传输层:UDP 与 TCP 协议全景指南
linux·服务器·网络·c++·笔记·tcp/ip·udp
薛定谔的悦4 小时前
储能 EMS 的功率策略:从一块电表到一次逆流的 200 毫秒
大数据·linux·能源·储能·bms
新时代牛马7 小时前
Linux 内核入门地图:架构、源码目录与五大子系统
linux·运维·架构
Julien20048 小时前
控制 SELinux 文件上下文
linux·运维·服务器
sulikey8 小时前
Linux Core Dump 完全指南:从原理到实战的崩溃调试手册。什么是core dump?程序报错core dumped怎么办?
linux·服务器·操作系统·调试·coredump
MayZork11 小时前
Windows 与 Linux 下 vcpkg 的安装部署指南
linux·运维·windows
zbyyd11 小时前
Linux 进程间通信学习笔记
linux·笔记·学习
w2005122415 小时前
Pod管理
linux·服务器·云原生·容器·k8s·podman
chen<>16 小时前
C++ 六种 memory_order:从原子性到线程间可见性.md
java·linux·开发语言·c++
一直C16 小时前
Linux系统编程|进程间通信IPC全套详解(1)(管道、信号)
linux·c语言·开发语言·网络·青少年编程·visual studio code