Shell命令行处理JSON
来源:互联网 发布:视频分析软件 编辑:程序博客网 时间:2024/06/05 09:59
基本介绍
经常用python或java处理json数据,其实在Shell命令行,我们可以用开源JQ工具来处理Json数据。会更加简洁和高效。
CentOS 安装JQ
wget -O jq https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64chmod +x ./jqcp jq /usr/bin
JQ常用举例
1、原始JSON数据
cat jsonData.json{"productId":"2723","click":60,"view":300,"deal":2,"day":"20130919"}{"productId":"2728","click":130,"view":800,"deal":10,"day":"20130919"}{"productId":"3609","click":50,"view":400,"deal":3,"day":"20130919"}{"productId":"3783","click":375,"view":1200,"deal":50,"day":"20130919"}{"productId":"3522","click":87,"view":573,"deal":15,"day":"20130919"}
2、格式化输出
jq -r . jsonData.json{ "productId": "2723", "click": 60, "view": 300, "deal": 2, "day": "20130919"}{ "productId": "2728", "click": 130, "view": 800, "deal": 10, "day": "20130919"}...
2、提取json指定字段转csv
这里我们需要得到productId_day,click,view,deal这种格式的csv文件。
jq -r '[.productId+"_"+.day,(.click|tostring),(.view|tostring),(.deal|tostring)]|join(",")' jsonData.json结果:2723_20130919,60,300,22728_20130919,130,800,103609_20130919,50,400,33783_20130919,375,1200,503522_20130919,87,573,15注意: .productId:取productId字段的值 .click|tostring:取click字段的值并转化为string类型 []:数组 join(","):数组中的元素通过","连接。
3、复杂json数据查询
complexJson='{"uid":"2378","nameInfo":[{"firstName":"nova","lastName":"jos"}]}'echo ${complexJson} |jq{ "uid": "2378", "nameInfo": [ { "firstName": "nova", "lastName": "jos" } ]}echo ${complexJson} |jq -r '.nameInfo[].lastName'结果:jos注意:.nameInfo[].lastName是获取.nameInfo[] json array中每个json object的lastName字段。
4、提取指定字段形成新的json
jq -c '{productId:.productId,click:.click,dayYmd:(.day|tonumber)}' jsonData.json >>newjson.json结果:cat newjson.json{"productId":"2723","click":60,"dayYmd":20130919}{"productId":"2728","click":130,"dayYmd":20130919}{"productId":"3609","click":50,"dayYmd":20130919}{"productId":"3783","click":375,"dayYmd":20130919}{"productId":"3522","click":87,"dayYmd":20130919}注意: -c/--compact-output:jq 默认是pretty-prints JSON 输出,加上这个参数,一行一个json对象。
5、csv文件转json文件
cat csvData.csv1478,john,381529,lucy,251673,iris,22jq -R -c 'split(",")|{"uid":.[0],"name":.[1],"age":.[2]|tonumber}' csvData.csv > csv2json.jsoncat csv2json.json{"uid":"1478","name":"john","age":38}{"uid":"1529","name":"lucy","age":25}{"uid":"1673","name":"iris","age":22}
主要参考文档
1、https://programminghistorian.org/lessons/json-and-jq
2、JQ使用手册:https://stedolan.github.io/jq/manual/#Basicfilters
3、JQ Cookbook:https://github.com/stedolan/jq/wiki/Cookbook
阅读全文
0 0
- Shell命令行处理JSON
- 使用jq工具在Shell命令行处理JSON数据
- jq 命令行 Shell 处理json 格式数据 示例
- shell命令行直接处理json的jq命令
- Bash Shell 命令行处理
- shell 命令行选项、参数处理
- shell中的命令行参数处理
- shell命令行处理getops/getopt
- shell 处理json格式数据
- Bash Shell 命令行 选项/参数处理
- shell学习笔记-命令行参数的处理
- 在Shell脚本中处理命令行参数
- Bash Shell中命令行选项/参数处理
- Bash Shell中命令行选项/参数处理
- Bash Shell中命令行选项/参数处理
- Bash Shell中命令行选项/参数处理
- Bash Shell中命令行选项/参数处理
- Bash Shell中命令行选项/参数处理
- 操作系统的堆和栈的区别
- 109. Convert Sorted List to Binary Search Tree
- 转载:JAVA基础编程练习题--50道
- Java 方法参数
- 软件架构师的12项修炼——关系技能修炼(1)
- Shell命令行处理JSON
- sublime 命令行直接调用
- 查找之索引查找
- prompt(1) to win writeup
- 在C语言中为什么scanf输入语句,要在变量名前加&呢?
- 无法启动此程序,因为计算机中丢失MSVCRTD.dll(MFC42D.dll, MFCO42D.dll)
- Ubuntu16.04LTS+CUDA8.0+cuDNN5.1+Anaconda3(python3.6)+tensorflow_gpu-1.2.1安装过程全记录
- gradle 用户手册 第4章使用Gradle的命令行
- 获取wifi密码办法