jq是一个查看和解析json文件的linux命令工具 ,centos直接yum install -y jq ,查看字段可用简单的jsonpath去访问;
本文测试数据:
{ "name":"John", "age":30, "car":null,"phone":["1"] }
{ "name":"zhang", "age":30, "car":null,"behavior":[{"say":"hello"},{"eat":"rice"}] }
常用方法:
cat file | jq . 用cat打开命令后,通过管道重定向到jq ,jq 解析json 根节点 "."
1.访问对象的属性 cat file | jq .name
2.访问数组属性 cat file | jq .behavior
没有对应的属性就返回null,对null返回就在那一行报错
注:访问具体的数组元素要对对应的字段加单引号
使用jq命令,将json转成csv文件:
{ "name":"John", "age":30,"car":null, "behavior":"eat" }
{ "name":"zhang", "age":30,"car":null, "behavior":"say" }
我们最终想要的是:
John,30,eat
zhang,30,say
先考虑将其给jq :cat file | jq .
由于我们需要将其弄成一行,并使用某种分隔符分开 :jq 本身可以将数组中各个元素使用\t(制表符)分开,所以我们考虑 cat file | jq '[ ]' 将我们需要的字段使用jsonpath指定到 前面 表达式中的 [ ] 中 所以变成了
cat file | jq '[ .name,.age,.car,.behavior]'
使用jq内置的@tsv 进行制表符分隔处理 cat test.json | jq '[ .name,.age,.behavior ] | @tsv':
接着使用sed将制表符替换成,并且 , cat test.json | jq '[ .name,.age,.behavior ] | @tsv' | sed 's/\\t/,/g'
最后去掉 多余的双引号:
csv的格式就做出来了,然后直接重定向到你的文件中就可以了!