Liunx上JSON处理工具jq
admin
2024-03-12 12:32:41
0

jq处理json字符串

一、概述

jq是一个Liunx系统上针对JSON处理的工具,它接收一个输入,然后生成一个输出。有许多内置过滤器用来提取对象的特定字段,或者将数字转为字符串,或者执行各种其他的标准任务。

二、调用jq

可以使用命令行选项来影响jq如何读写输入和输出,有很多,这里只选择几个自认为常用的,下面的示例用将会以该json字符示例

# a.jsoncat
{"use_name": "xiaoMing","age": 12,"sex":"男"}
  • json格式查看

    cat a.json | jq#打印输出--------------
    {"use_name": "xiaoMing","age": 12,"sex": "男"
    }
    
  • -S,顺序输出

    将json的各个字段按照key排序输出

    cat a.json | jq -S
    # 打印输出--------------
    {"age": 12,"sex": "男","use_name": "xiaoMing"
    }
    
  • -r,去掉双引号输出

    使用该命令,如果过滤器的结果是string,将会以标准输出,而不是 字符串的格式输出,该示例是获取json里的所有key

    jq  keys[] a.json
    # 打印输出--------------
    "age"
    "sex"
    "use_name"# 加上-r 效果
    jq  -r keys[] a.json
    age
    sex
    use_name
    

三、基本过滤器

  • .(点),最常用的过滤器,

    一个JSON像map一样,键值对的形式存在,.age 即代表获取age对应的值,如果不存在则返回null

    jq .age
    # 打印输出--------------
    12
    
  • [i] 通过索引访问元素,当JSON是数组对象时,可以使用索引下标的形式访问元素

    jq '.[0]'
    --------------------
    Input   [{"name":"JSON", "good":true}, {"name":"XML", "good":false}]
    Output  {"name":"JSON", "good":true}
    

    i为负索引也是可以的,-1代表最后一个元素,-2代表倒数第二个元素。
    .[] 则返回所有元素

    给定一个索引范围返回元素,[2,4] 返回数组长度为3,包含了从2(包含)到4(不包含)的元素

    jq '.[2:4]'
    --------------------
    Input   ["a","b","c","d","e"]
    Output  ["c", "d"]
    
    jq '.[:3]'
    --------------------
    Input   ["a","b","c","d","e"]
    Output  ["a", "b", "c"]
    
    jq '.[-2]'
    --------------------
    Input   [1,2,3]
    Output  2
    
  • | 管道,和Liunx的用法一样,将左边的结果,再拿到右边执行

    jq '.[1] | .name'
    --------------------
    Input   [{"name":"JSON", "good":true}, {"name":"XML", "good":false}]
    Output  “XML”
    

    先获取索引为1的元素,再获name属性值

四、数组构造

[] 可以用来构造数组,如[1,2,3] ,jq也可以用来输出一个数组。它是使用表达式将产生的结果收集到一个大数组里,用 隔开每个元素表达式

jq '[.[0].name , .[1].goods]'
--------------------
Input   [{"name":"JSON", "good":true}, {"name":"XML", "good":false}]
Output  ["JSON", false]

获取索引为0的元素的name属性 和 索引为1的元素的good的属性

五、对象构造{}

构建一个json对象,又叫字典或者哈希,如{"a":23,"b":23}。如果key由所有字母字符组成,在构建过程中引号可以省略。Value可以是任何复杂的表达式

  • 基本构建

    从两个对象取几个字段重新构建成一个json对象

    jq '{name: .name , age: .age}'Input   {"name":"JSON", "good":true,"age":34}
    Output  {name: "JSON" , age: 34}
    

    由于使用频繁,所以有一个快捷语法

    jq '{name, age}'
    
  • value表达式返回多个值

    如果其中的一个表达式生成多个结果,那么返回的对象将会多个,例如:

    # 输入
    {"user":"stedolan","titles":["JQ Primer", "More JQ"]}# 命令
    jq  {user, title: .titles[]}# 输出
    {"user":"stedolan", "title": "JQ Primer"}
    {"user":"stedolan", "title": "More JQ"}

    如果是想title里也想输出数组的话,则使用

    {user,tie:.titles}
    要怎么理解这种用法,.titles[] 已经声明了这是个数组,.titles 则代表的是一个对象,只是这个对象是个数组。

  • key上使用表达式

    刚才说过,在定义key的时候,双引号可以省略掉,那么如果key上也想使用表达式,则使用() 括号包裹,例如:

    # 输入
    {"user":"stedolan","titles":["JQ Primer", "More JQ"]}# 命令
    {(.user): .titles}

参考文献

https://stedolan.github.io/jq/manual/
# 中文文档
https://github.com/alingse/jq-manual-cn/tree/master/manual/v1.5https://blog.csdn.net/iamanda/article/details/122234695https://blog.csdn.net/whatday/article/details/125397561

相关内容

热门资讯

我在他乡挺好根据什么小说改编的... 我在他乡挺好根据什么小说改编的?《我在他乡挺好的》是原创的电视剧,并不是根据小说改编的《我在他乡挺好...
我想要什么的作文 我想要什么的作文                                          ...
请问“啊莱噢莱噢莱。。。”这是... 请问“啊莱噢莱噢莱。。。”这是一首歌吗叫《我们是冠军》不对吧,应该是意大利AC米兰队的队歌.
同安第二实验小学王彪 张正霖的... 同安第二实验小学王彪 张正霖的漫画我张霖没 原稿早丢
浪子回头的例子,古今中外皆可 浪子回头的例子,古今中外皆可除了周处的那个,我已经知道了。 多多益善,谢谢大家!乐羊子受妻子劝诫浪子...
不败和主不败的区别 不败和主不败的区别不败和主不败的区别就是,不败的意思就是没有输过,此人一生对战老余无数,未尝一败,可...
足球不败怎么下 足球不败怎么下足球比赛不败的意思就是在比赛当中胜利或者平局。根据查拍吵询相关公开信息显示,主场不败就...
甄姬皮肤哪个手感好 甄姬皮肤哪个手感好甄姬皮肤哪个手感好,如下:1、冰雪圆舞曲:这款皮肤定价为888点券,但它只是勇者皮...
《知否》中墨兰是什么结局?和小... 《知否》中墨兰是什么结局?和小说中有什么不同吗?在电视剧当中,墨兰还有盛明兰两个人是和好了,并且成为...
求小说!! 求小说!!笑傲江湖好看
古代的‘天启’是什么意思? 古代的‘天启’是什么意思?即上天的启示。
中班语言喇叭花电话怎么引题比较... 中班语言喇叭花电话怎么引题比较好   举烂纤活动目标:  1、学习用搓、剪、贴的方式来表现自己眼...
谢霆锋的粤语歌 谢霆锋的粤语歌活着viva活着viva
新疆旅行社排名及联系电话,陪父... 家人们,新疆,这片位于中国西北边陲的广袤大地,宛如一颗璀璨的明珠,散发着独特而迷人的魅力。它是中国陆...
我想哭,可是我已经不知道该怎么... 我想哭,可是我已经不知道该怎么流泪了?英语怎么说?我想哭,可是我已经不知道该怎么流泪了I want ...
黄山5日游带小孩旅游报价,黄山... 黄山5日游带小孩旅游报价,黄山参加本地团五天需要多少钱? 在快节奏的现代生活里,越来越多的家庭渴望一...
贵州旅游游玩5天自由行超全攻略... 作为一个热爱旅行的驴友,我计划已久的贵州之行终于提上了日程。然而,面对贵州众多的景点和复杂的交通路线...
观潮的作者资料 观潮的作者资料观潮的作者资料《观潮》作者简介 周密(1232一约1298),南宋词人,字公谨,号草...
黑龙江省今年暑期首趟“银发游”... 7月11日20时08分,在黑龙江哈尔滨站,366名游客踏上开往内蒙古海拉尔的Y773次旅游列车,开启...
黄山旅游最佳路线图,黄山5日游... 黄山旅游最佳路线图,黄山5日游最好的行程规划 家人们,黄山作为中国的名山之一,那可是无数人心中的旅游...