UNPKG

3.83 kBMarkdownView Raw
1jq
2===
3
4一个灵活的轻量级命令行JSON处理器
5
6### 补充说明
7
8jq 是 stedolan 开发的一个轻量级的和灵活的命令行JSON处理器,源码请参考 [jq 项目主页](https://github.com/stedolan/jq)
9
10jq 用于处理JSON输入,将给定过滤器应用于其JSON文本输入并在标准输出上将过滤器的结果生成为JSON。
11
12最简单的过滤器是`.`,它将jq的输入未经修改地复制到其输出中(格式设置除外)。
13
14请注意,jq 当前仅支持64位双精度浮点数(IEEE754)。
15
16
17### 安装
18
19```bash
20# Debian系,如 Ubuntu
21sudo apt-get install jq
22
23# RedHat系, 如 CentOS
24yum install jq
25```
26
27### 语法
28
29```bash
30jq [options] <jq filter> [file...]
31jq [options] --args <jq filter> [strings...]
32jq [options] --jsonargs <jq filter> [JSON_TEXTS...]
33```
34
35### 选项
36
37```bash
38-c 紧凑而不是漂亮的输出;
39-n 使用`null`作为单个输入值;
40-e 根据输出设置退出状态代码;
41-s 将所有输入读取(吸取)到数组中;应用过滤器;
42-r 输出原始字符串,而不是JSON文本;
43-R 读取原始字符串,而不是JSON文本;
44-C 为JSON着色;
45-M 单色(不要为JSON着色);
46-S 在输出上排序对象的键;
47--tab 使用制表符进行缩进;
48--arg a v 将变量$a设置为value<v>;
49--argjson a v 将变量$a设置为JSON value<v>;
50--slurpfile a f 将变量$a设置为从<f>读取的JSON文本数组;
51--rawfile a f 将变量$a设置为包含<f>内容的字符串;
52--args 其余参数是字符串参数,而不是文件;
53--jsonargs 其余的参数是JSON参数,而不是文件;
54-- 终止参数处理;
55```
56
57### 例子
58
59`.`: 以漂亮的方式输出
60
61```bash
62$ echo '{ "foo": { "bar": { "baz": 123 } } }' | jq '.'
63{
64 "foo": {
65 "bar": {
66 "baz": 123
67 }
68 }
69}
70
71```
72
73`.foo, .foo.bar, .foo?`: 获取一个键的值
74
75```bash
76$ echo '{"foo": 42, "bar": "less interesting data"}' | jq '.foo'
7742
78```
79
80`.[], .[]?, .[2], .[10:15]`: 数组运算
81
82```bash
83$ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[1]'
84{
85 "name": "XML",
86 "good": false
87}
88
89```
90
91`[], {}`: 构造一个数组/对象
92
93```bash
94$ echo '{"user":"stedolan","titles":["JQ Primer", "More JQ"]}' | jq '{user, title: .titles[]}'
95
96{
97 "user": "stedolan",
98 "title": "JQ Primer"
99}
100{
101 "user": "stedolan",
102 "title": "More JQ"
103}
104
105```
106
107`length`: 计算一个值的长度
108
109```bash
110$ echo '[[1,2], "string", {"a":2}, null]' | jq '.[] | length'
1112
1126
1131
1140
115
116```
117
118`keys`: 取出数组中的键
119
120```bash
121$ echo '{"abc": 1, "abcd": 2, "Foo": 3}' | jq 'keys'
122[
123 "Foo",
124 "abc",
125 "abcd"
126]
127
128```
129
130`,`: 使用多个过滤器
131
132```bash
133$ echo '{ "foo": 42, "bar": "something else", "baz": true}' | jq '.foo, .bar'
13442
135"something else"
136
137```
138
139`|`: 通过管道将一个过滤器的输出当做下一个过滤器的输入
140
141```bash
142$ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[] | .name'
143"JSON"
144"XML"
145
146```
147
148`select(foo)`: 如果foo返回true,则输入保持不变
149
150```bash
151$ echo '[1,5,3,0,7]' | jq 'map(select(. >= 2))'
152[
153 5,
154 3,
155 7
156]
157
158```
159
160`map(foo)`: 每个输入调用过滤器
161
162```bash
163$ echo '[1,2,3]' | jq 'map(.+1)'
164[
165 2,
166 3,
167 4
168]
169
170```
171
172`if-then-else-end`: 条件判断
173
174```bash
175 $ echo '2' | jq 'if . == 0 then "zero" elif . == 1 then "one" else "many" end'
176
177"many"
178
179```
180
181`\(foo)`: 在字符串中插入值并进行运算
182
183```bash
184$ echo '42' | jq '"The input was \(.), which is one less than \(.+1)"'
185
186"The input was 42, which is one less than 43"
187
188```
189
190