背景:今天某系统传来的接口文件是json格式的,客户要求我们赶快手工处理一下。由于我们的入库程序只支持定长或固定分隔符的文件。所以网上找了下linux格式化json的工具。
网上找到了jq工具
jq官网下载
jq官网手册
官网的手册也很详细。但是examples都打不开。网上也有一些教程,但是看了很多篇,发现没有我要的需求如何操作。
先说下我的需求:
输入JSON
#cat test.json
[{"a":"1","b":"x"},{"a":"2","b":"y"},{"a":"3","b":"z"}]
输出格式
#后面的hello是自定义的字段值
1,x,hello
2,y,hello
3,z,hello
jq命令
cat test.json|jq '.[]|"\(.a),\(.b),hello"'
#命令解释(仅解释jq命令入参)
1).[] 是为了将json数组扁平化;这样才能一个json键值对能一行输出
2)| 是管道命令,可以继续执行后面的命令
3)双引号括起来的是输出文本。涉及要引用key值就用\(.xxx)的方法
如:\(.a)是引用key值为a对应的value值,同理\(.b)是引用key值为b对应的value值。
4)最后整个jq参数用单引号扩起来,走你~~
感觉这种方法如果字段比较多的话会比较笨重,也尝试找了其他方法,还没有找到合适的。如果有同学有更简洁的方法还请告知~