用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