jq 是一个命令行工具,用于处理 JSON 数据。它提供了一组强大的过滤和转换功能,可以轻松地解析、查询和转换 JSON 数据,在物联网中处理Mqtt协议的JSON是非常方便的。
使用 jq,您可以从 JSON 文本中提取、转换和格式化数据。它支持使用各种运算符、函数和插件来处理 JSON 数据,并且输出结果可以直接传递给其他命令或脚本。
1.基础过滤
最简单的过滤器是.。这个过滤器接受输入并产生与输出相同的值。
如:
2.JSON对象访问
当给定一个JSON对象作为输入时,如果该对象中存在键 "foo",则.foo会返回该键对应的值;如果不存在该键,则返回 null。
3.JSON对象访问(Optional)
如果您希望在.不是一个对象时不输出错误,可以使用条件检查来确保对象存在,然后再尝试访问其属性.
4.对象索引 .[]
你也可以使用类似 .["foo"] 的语法来查找对象的字段(上面的 .foo 是它的简写形式,但仅适用于类似标识符的字符串)。
5.数组索引 .[]
当索引值为整数时,.[] 可以用于数组索引。数组是基于0的索引,因此 .[2] 返回的是第三个元素。
负数索引也是允许的,其中 -1 指的是最后一个元素,-2 指的是倒数第二个元素,以此类推。
6.数组或字符串切片
.[:] 语法可用于返回数组的子数组或字符串的子字符串。 .[10:15] 返回的数组长度为 5,包含从索引 10(包括)到索引 15(不包括)的元素。任一索引可以是负数(在这种情况下,它从数组的末尾开始倒数),或者可以省略(在这种情况下,它指的是数组的开始或结束)。索引是基于0的。
7.对象或数组遍历
如果你使用 .[index] 语法,但完全省略了索引,则将返回数组中的所有元素。使用 .[] 输入 [1,2,3] 将产生三个单独的结果,而不是一个单一的数组。 .foo[] 的过滤器形式等同于 .foo | .[]。
8.索引(Optional)
类似于 .[],但如果 . 不是数组或对象,则不会输出错误。形如 .foo[]? 的过滤器等价于 .foo | .[]?。
9.Comma
如果两个过滤器用逗号分隔,则相同的输入将同时进入这两个过滤器,并且这两个过滤器的输出值流将按顺序连接:首先是左表达式产生的所有输出,然后是右表达式产生的所有输出。例如,过滤器 .foo, .bar 会同时产生 "foo" 和 "bar" 字段作为单独的输出。
10.Pipe :|
运算符通过将左侧过滤器的输出作为右侧过滤器的输入来组合两个过滤器。
11.Parenthesis
圆括号 () 用于创建子查询和其他目的。它们的作用与任何典型编程语言中的分组运算符相同。
领取专属 10元无门槛券
私享最新 技术干货