用jq命令处理JSON数据
如果你需要在命令行下处理 JSON,可以使用jq。jq 不仅 能够满足一般性的常见需求,更包含运算、内置函数、条件比较、 变量声明、自定函数等强大功能。对此感兴趣的朋友可以通过 jq 的官方手册进行学习。
安装
mac下可以用brew进行安装
brew install jq
使用案例
提供几个使用案例给大家,让大家对jq的功能有一个大概的了解 先来看一下我们的原始的json文件
cat aliyunCitySelectData.bk | more
{
"中国": {
"北京": ["东城区", "西城区", "崇文区", "宣武区", "朝阳区", "丰台区", "石景山区", "海淀区", "门头沟区", "房山区", "通州区", "顺义区", "昌平区", "大兴区", "平谷区", "怀柔区", "密云区", "延庆区"],
"天津": ["和平", "河东", "河西", "南开", "河北", "红桥", "塘沽", "汉沽", "大港", "东丽", "西青", "津南", "北辰", "宁河", "武清", "静海", "宝坻", "蓟县"],
"河北": ["石家庄", "唐山", "秦皇岛", "邯郸", "邢台", "保定", "张家口", "承德", "沧州", "廊坊", "衡水"],
"山西": ["太原", "大同", "阳泉", "长治", "晋城", "朔州", "晋中", "运城", "忻州", "临汾", "吕梁"],
"内蒙古": ["呼和浩特", "包头", "乌海", "赤峰", "通辽", "鄂尔多斯", "呼伦贝尔", "巴彦淖尔", "乌兰察布", "兴安", "锡林郭勒", "阿拉善"],
"辽宁": ["沈阳", "大连", "鞍山", "抚顺", "本溪", "丹东", "锦州", "营口", "阜新", "辽阳", "盘锦", "铁岭", "朝阳", "葫芦岛"],
"吉林": ["长春", "吉林", "四平", "辽源", "通化", "白山", "松原", "白城", "延边"],
"黑龙江": ["哈尔滨", "齐齐哈尔", "鸡西", "鹤岗", "双鸭山", "大庆", "伊春", "佳木斯", "七台河", "牡丹江", "黑河", "绥化", "大兴安岭"],
"上海": ["黄浦", "卢湾", "徐汇", "长宁", "静安", "普陀", "闸北", "虹口", "杨浦", "闵行", "宝山", "嘉定", "浦东新", "金山", "松江", "南汇", "奉贤", "青浦", "崇明"],
"江苏": ["南京", "无锡", "徐州", "常州", "苏州", "南通", "连云港", "淮安", "盐城", "扬州", "镇江", "泰州", "宿迁"],
"浙江": ["杭州", "宁波", "温州", "嘉兴", "湖州", "绍兴", "金华", "衢州", "舟山", "台州", "丽水"],
"安徽": ["合肥", "芜湖", "蚌埠", "淮南", "马鞍山", "淮北", "铜陵", "安庆", "黄山", "滁州", "阜阳", "宿州", "巢湖", "六安", "亳州", "池州", "宣城"],
"福建": ["福州", "厦门", "莆田", "三明", "泉州", "漳州", "南平", "龙岩", "宁德"],
...
格式化
cat aliyunCitySelectData.bk | jq . | more
{
"中国": {
"北京": [
"东城区",
"西城区",
"崇文区",
"宣武区",
"朝阳区",
"丰台区",
"石景山区",
"海淀区",
"门头沟区",
"房山区",
"通州区",
"顺义区",
"昌平区",
"大兴区",
"平谷区",
"怀柔区",
"密云区",
"延庆区"
],
"天津": [
提取json的部分内容
把中国北京市的区找出来
cat aliyunCitySelectData.bk | jq '.["中国"]["北京"]'
[
"东城区",
"西城区",
"崇文区",
"宣武区",
"朝阳区",
"丰台区",
"石景山区",
"海淀区",
"门头沟区",
"房山区",
"通州区",
"顺义区",
"昌平区",
"大兴区",
"平谷区",
"怀柔区",
"密云区",
"延庆区"
]
jq的管道操作
熟悉命令行的朋友可能都知道 | (管道)是一个非常强大的 武器。jq 也提供了类似的功能。
把中国的省、直辖市.....都找出来 ,keys是jq内置的一个函数
cat aliyunCitySelectData.bk | jq '.["中国"]| keys'
[
"上海",
"云南",
"内蒙古",
"北京",
"台湾",
"吉林",
"四川",
"天津",
"宁夏",
"安徽",
"山东",
"山西",
"广东",
"广西",
"新疆",
"江苏",
"江西",
"河北",
"河南",
"浙江",
"海南",
"湖北",
"湖南",
"澳门",
"甘肃",
"福建",
"西藏",
"贵州",
"辽宁",
"重庆",
"陕西",
"青海",
"香港",
"黑龙江"
]
再算下数量
cat aliyunCitySelectData.bk | jq '.["中国"]|keys|length',length也是jq的一个内置函数
34