jq

jq

一个灵活的轻量级命令行JSON处理器

补充说明

jq 是 stedolan 开发的一个轻量级的和灵活的命令行JSON处理器,源码请参考 jq 项目主页

jq 用于处理JSON输入,将给定过滤器应用于其JSON文本输入并在标准输出上将过滤器的结果生成为JSON。

最简单的过滤器是.,它将jq的输入未经修改地复制到其输出中(格式设置除外)。

请注意,jq 当前仅支持64位双精度浮点数(IEEE754)。

安装

# Debian系,如 Ubuntu
sudo apt-get install jq

# RedHat系, 如 CentOS
yum install jq

语法

jq [options] <jq filter> [file...]
jq [options] --args <jq filter> [strings...]
jq [options] --jsonargs <jq filter> [JSON_TEXTS...]

选项

-c               紧凑而不是漂亮的输出;
-n               使用null作为单个输入值;
-e               根据输出设置退出状态代码;
-s               将所有输入读取(吸取)到数组中;应用过滤器;
-r               输出原始字符串,而不是JSON文本;
-R               读取原始字符串,而不是JSON文本;
-C               为JSON着色;
-M               单色(不要为JSON着色);
-S               在输出上排序对象的键;
--tab            使用制表符进行缩进;
--arg a v        将变量$a设置为value<v>;
--argjson a v    将变量$a设置为JSON value<v>;
--slurpfile a f  将变量$a设置为从<f>读取的JSON文本数组;
--rawfile a f    将变量$a设置为包含<f>内容的字符串;
--args           其余参数是字符串参数,而不是文件;
--jsonargs       其余的参数是JSON参数,而不是文件;
--               终止参数处理;

例子

.: 以漂亮的方式输出

$ echo '{ "foo": { "bar": { "baz": 123 } } }' | jq '.'
{
  "foo": {
    "bar": {
      "baz": 123
    }
  }
}

.foo, .foo.bar, .foo?: 获取一个键的值

$ echo '{"foo": 42, "bar": "less interesting data"}' | jq '.foo'
42

.[], .[]?, .[2], .[10:15]: 数组运算

$ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[1]'
{
  "name": "XML",
  "good": false
}

[], {}: 构造一个数组/对象

$ echo '{"user":"stedolan","titles":["JQ Primer", "More JQ"]}' | jq '{user, title: .titles[]}'

{
  "user": "stedolan",
  "title": "JQ Primer"
}
{
  "user": "stedolan",
  "title": "More JQ"
}

length: 计算一个值的长度

$ echo '[[1,2], "string", {"a":2}, null]' | jq '.[] | length'                                  
2
6
1
0

keys: 取出数组中的键

$ echo '{"abc": 1, "abcd": 2, "Foo": 3}' | jq 'keys'                                        
[
  "Foo",
  "abc",
  "abcd"
]

,: 使用多个过滤器

$ echo '{ "foo": 42, "bar": "something else", "baz": true}' | jq '.foo, .bar' 
42
"something else"

|: 通过管道将一个过滤器的输出当做下一个过滤器的输入

$ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[] | .name'                                                 
"JSON"
"XML"

select(foo): 如果foo返回true,则输入保持不变

$ echo '[1,5,3,0,7]' | jq 'map(select(. >= 2))'                                                    
[
  5,
  3,
  7
]

map(foo): 每个输入调用过滤器

$ echo '[1,2,3]' | jq 'map(.+1)'
[
  2,
  3,
  4
]

if-then-else-end: 条件判断

 $ echo '2' | jq 'if . == 0 then "zero" elif . == 1 then "one" else "many" end'

"many"

(foo): 在字符串中插入值并进行运算

$ echo '42' | jq '"The input was \(.), which is one less than \(.+1)"'          

"The input was 42, which is one less than 43"

若文章对你有帮助,可以点赞或打赏支持我们。发布者:Aurora,转载请注明出处:http://61.174.243.28:13541/AY-knowledg-hub/jq/

(0)
AuroraAurora站点维系者
上一篇 2023年 12月 19日 下午4:11
下一篇 2023年 12月 19日 下午4:12

相关推荐

  • Helm 升级

    升级版本 文章目录简介可选项从父命令继承的命令请参阅 简介 该命令将发布升级到新版的chart。 升级参数必须是发布和chart。chart参数可以是:chart引用(&#8216…

    入门教程 2023年 12月 14日
  • SQL 简介

    SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)。 SQL 的范围包括数据插入、查询、更新和删除,数据库模…

    2023年 5月 28日
  • 环境设置

    如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。 文章目录文本编辑器C++ 编译器安装 GNU 的 C/C++ 编译器UNIX…

    2024年 3月 18日
  • Java 运算符

    计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符…

    入门教程 2023年 3月 4日
  • TCP/IP 邮件

    电子邮件是 TCP/IP 最重要的应用之一。 文章目录您不会用到…邮件程序会用到…SMTP – 简单邮件传输协议POP – 邮局协议…

    2023年 5月 15日
  • lscpu

    文章目录lscpu补充说明语法选项参数例子 lscpu 显示有关CPU架构的信息 补充说明 lscpu命令 是显示有关CPU架构的信息。 语法 lscpu [选项] 选项 -a, …

    入门教程 2023年 12月 19日
  • elinks

    文章目录elinks补充说明语法选项参数 elinks 纯文本界面的WWW浏览器 补充说明 elinks命令 能实现一个纯文本界面的WWW浏览器,操作方式与“lynx”类似。 语法…

    入门教程 2023年 12月 14日
  • let

    文章目录let概要主要用途参数返回值运算符优先级递减表例子注意 let 简单的计算器,执行算术表达式。 概要 let arg [arg …] 主要用途 执行一个或多个算术表达式…

    入门教程 2023年 12月 19日
  • setsid

    文章目录setsid补充说明语法选项实例 setsid 在新的会话中运行程序 补充说明 setsid命令 子进程从父进程继承了:SessionID、进程组ID和打开的终端。子进程如…

    入门教程 2024年 3月 4日
  • dd

    文章目录dd补充说明语法选项实例 dd 复制文件并对原文件的内容进行转换和格式化处理 补充说明 dd命令 用于复制文件并对原文件的内容进行转换和格式化处理。dd命令功能很强大的,对…

    入门教程 2023年 12月 7日

发表回复

登录后才能评论
Translate »