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")'