Shell处理Json

jq安装

apt-get install jq

jq命令格式

jq [options] filter [files]
**options:**
--version:输出jq的版本信息并退出
--slurp/-s:读入整个输入流到一个数组。
--raw-input/-R:不作为JSON解析,将每一行的文本作为字符串输出到屏幕。
--null-input/ -n:不读取任何输入,过滤器运行使用null作为输入。一般用作从头构建JSON数据。
--compact-output /-c:使输出紧凑,而不是把每一个JSON对象输出在一行。
--colour-output / -C:打开颜色显示
--monochrome-output / -M:关闭颜色显示

--ascii-output /-a:指定输出格式为ASCII

-raw-output /-r :如果过滤的结果是一个字符串,那么直接写到标准输出(去掉字符串的引号)

**filter:**
.   : 默认输出
.foo: 输出指定属性,foo代表属性。
.[foo] :输出指定数组元素。foo代表数组下标。
.[]:输出指定数组中全部元素
, :指定多个属性作为过滤条件时,用逗号分隔
| : 将指定的数组元素中的某个属性作为过滤条件

**files:**
    JOSN格式文件。

简单示例

假设存在json.txt文件,且内容为:

cat json.txt 
{"name":"Google","location":{"street":"1600 Amphitheatre Parkway","city":"Mountain View","state":"California","country":"US"},"employees":[{"name":"Michael","division":"Engineering"},{"name":"Laura","division":"HR"},{"name":"Elise","division":"Marketing"}]}

格式化json

cat json.txt | jq .

根据key获取value

jq .key

如果没有对应属性则返回null。

获取 name

cat json.txt | jq .name
cat json.txt | jq -r .name

嵌套获取

cat json.txt | jq .location.state

获取数组

cat json.txt | jq .employees[1].name

内建函数

keys:获取json中的key元素

cat json.txt | jq keys	

has:判断是否存在某个key

cat json.txt | jq 'has("name")'

更多有用信息