这里的 jq 可不是曾经的前端利器 jQuery。

jq是一个出色的命令行针对JSON处理器,提供了用于查询、操作和使用JSON文件的大量功能,而且作为一个命令行工具,可配合UNIX管道使用,单行脚本处理JSON;

jq可以对json数据进行分片、过滤、映射、转换;和sed、awk、grep等命令一样,可以让你轻松地把玩文本;它能轻松地把你拥有的数据’转换成’你期望的格式,而且需要写的程序通常也比你期望的更加简短。

安装 jq

你可以用市面上的各种包管理器来安装 jq,例如 linux 的 apt-get、OS X 的 HomeBrew等,如果安装失败或者找不到包,把包管理器升级一下再试试。

$ apt-get install jq -y
$ brew install jq
$ yum install jq
$ chocolatey install jq
# ......

语法

jq 的使用场景大多是通过管道的形式来对数据进行过滤或者增强等操作

❯ jq –help
jq - commandline JSON processor [version 1.6]

Usage: jq [options] [file…]
jq [options] –args [strings…]
jq [options] –jsonargs [JSON_TEXTS…]

jq is a tool for processing JSON inputs, applying the given filter to
its JSON text inputs and producing the filter’s results as JSON on
standard output.

The simplest filter is ., which copies jq’s input to its output
unmodified (except for formatting, but note that IEEE754 is used
for number representation internally, with all that that implies).

For more advanced filters see the jq(1) manpage (“man jq”)
and/or https://stedolan.github.io/jq

Example:

$ echo '{"foo": 0}' | jq .
{
    "foo": 0
}

Some of the options include:
-c compact instead of pretty-printed output;
-n use null as the single input value;
-e set the exit status code based on the output;
-s read (slurp) all inputs into an array; apply filter to it;
-r output raw strings, not JSON texts;
-R read raw strings, not JSON texts;
-C colorize JSON;
-M monochrome (don’t colorize JSON);
-S sort keys of objects on output;
–tab use tabs for indentation;
–arg a v set variable $a to value ;
–argjson a v set variable $a to JSON value ;
–slurpfile a f set variable $a to an array of JSON texts read from ;
–rawfile a f set variable $a to a string consisting of the contents of ;
–args remaining arguments are string arguments, not files;
–jsonargs remaining arguments are JSON arguments, not files;
– terminates argument processing;

Named arguments are also available as $ARGS.named[], while
positional arguments are available as $ARGS.positional[].

See the manpage for more options.

filter:

  • .:默认输出
  • .key:指定字段输出
  • .[index]:数组索引输出
  • ,:多个条件连接
  • |:将前一个 filter 的输出作为后一个 filter 的输入

格式化数据

比如我现在有这一个接口,用于获取分类,直接用 curl 获取的结果如下

image-20220720202657154

这里会非常混乱,很难阅读,这时我可以使用 jq 来对输出结果进行格式化及上色

image-20220720202903510

这时再看起来是不是就没有那么混乱了。

提取字段

上面的操作只是对结果进行格式化,如果数据量太大,我们可以只挑选出我们想要看到的部分进行展示。

如果我们指向看 success 字段

image-20220720212316957

如果我们想看 data 的第一条,格式化命令之中可以使用管道符连接,管道符前的结果将传递给管道符后面

image-20220720212032244

再如果我们想看前 3 条 data,多个值使用逗号连接

image-20220720212452898

如果中括号中没有任何索引,则获取全部数组元素,我们下面来试一下获取所有分类的 className 字段

image-20220720212841370

构建 JSON 对象

除了对 JSON 进行格式化及字段提取之外,还可以从零构建 JSON

image-20220720214346311

-n 参数表示不接手任何 JSON 输入,即从 null 开始构建

重组字段

jq 可以将数组重组为对象属性,也可以将对象属性重组为数组

image-20220720214809060

内建函数

判断

使用 has 函数来判断对象中是否存在指定 key

image-20220720215055034

筛选

使用 select 函数来进行条件筛选

image-20220720215639533

计算

使用运算符可以直接进行计算

image-20220720215851654

删除

使用 del 函数可以删除 JSON 中的指定字段,例如我们将 data 字段删除时候输出结果中就没有 data 了

image-20220720220005384

迭代

使用 map 函数可以对数据进行迭代处理,类似于 JavaScript 中的 Array.prototype.map

image-20220720220607178


前端小白