专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网
励北网

jq命令怎么用,jq命令用法

来源:小易整编  作者:小易  发布时间:2023-03-28 05:06
摘要:jq命令怎么用,jq命令用法jq介绍jq是stedolan开发的一个轻量级的和灵活的命令行JSON处理器。它主要用于在命令行界面处理JSON输入,并使用给定的过滤条件来过滤符合条件的新的JSON串。通常在类Unix环境下,我们可以快速的使用...

过指定索引范围获取一个子列表 ### 而通过.[] 则可以直接迭代指定filed 里的values,这里不仅仅是列表了,比如可以通过 .Contact[] 将联系人的全部方式获取出来 $ echo '{"Name":"CloudNativeOps","Owner":"GoOps","WebSite":"https://bgbiao.top/", "Contact": {"Email":"weichuangxxb@qq.com","QQ":"371990778","WeChat":"GoOps"} ,"Skills": [ {"name":"Python","type":"dev" }, {"name":"Golang","type":"dev" },{"name":"Ansible","type":"ops" },{"name":"Kubernetes","type":"dev" },{"name":"ElasticSearch","type":"ops" }]}'  | jq .Contact[] "weichuangxxb@qq.com" "371990778" "GoOps" ### 而如果是列表或者数组,则可以指定元素 (支持倒序获取,即.[-1]表示获取列表中的最后一个元素) $ echo '{"Name":"CloudNativeOps","Owner":"GoOps","WebSite":"https://bgbiao.top/", "Contact": {"Email":"weichuangxxb@qq.com","QQ":"371990778","WeChat":"GoOps"} ,"Skills": [ {"name":"Python","type":"dev" }, {"name":"Golang","type":"dev" },{"name":"Ansible","type":"ops" },{"name":"Kubernetes","type":"dev" },{"name":"ElasticSearch","type":"ops" }]}'  | jq .Skills[0] {  "name": "Python",  "type": "dev" } ## 管道 (在jq 的表达式中,可以使用 管道符号 | 来对前面的表达式结果进行再次处理) ### 比如上面的列子中,我们使用.Skills[] 获取了子json,但是如果仅想获取子json中的某一个filed,就可以使用管道的能力 ### 所以,一般管道的更多会和列表类型的迭代配合使用 $ echo '{"Name":"CloudNativeOps","Owner":"GoOps","WebSite":"https://bgbiao.top/", "Contact": {"Email":"weichuangxxb@qq.com","QQ":"371990778","WeChat":"GoOps"} ,"Skills": [ {"name":"Python","type":"dev" }, {"name":"Golang","type":"dev" },{"name":"Ansible","type":"ops" },{"name":"Kubernetes","type":"dev" },{"name":"ElasticSearch","type":"ops" }]}'  | jq '.Skills[] | .name ' "Python" "Golang" "Ansible" "Kubernetes" "ElasticSearch" ## 值计算 echo '{"num":12}' | jq '(.num +2)*1024' 14336

注意 1: 在上面的示例中,Skills 字段是一个 列表,我们需要注意,  .Skills、.Skills[]、.Skills[N] 以及.Skills[N:M] 的区别

  • .Skills: 普通的获取 Skills 字段的 values,由于是列表,返回为一个列表,为通用方式
  • .Skills[]: 迭代 Skills 字段里的元素,因为 Skills 为元素为子 json 的列表,因此返回全部的子 json,为通用方式
  • .Skills[N]: 获取列表中索引为 N 的元素,仅用于在字段为列表类型时
  • .Skills[N:M]: 截取列表中索引从 N 到 M 元素为一个新的列表,仅用于字段为列表类型时

注意 2: 在上述中对列表类型的值进行迭代后通过管道取值.Skills[] | .name 和 .Skills[].name 有着相同的作用

2.3 复杂数据类型构建

  • 列表 (数组) 构建 []: 可以将输出字符返回成一个列表 (可以结合多字段使用)
  • 对象构建 {}: 可以联合 () 构建新的 json 对象
    • {} 可以通过字段构建新的 json 结构,比如 {user, title: .titles[]} 表示将 titles 数组中的元素迭代出来后和 user 字段重新组成多个 json 字串
    • () 可以用于直接将 value 作为 key,比如 {(.user): .titles} 可以直接构建无声明 key 的 json 串
  • 递归下降..: 可以递归下降,将字符串的每一个 value 都迭代出来,用法和内置的 recurse 函数相似

## 数组构建 $ echo '{"Name":"CloudNativeOps","Owner":"GoOps","WebSite":"https://bgbiao.top/", "Contact": {"Email":"weichuangxxb@qq.com","QQ":"371990778","WeChat":"GoOps"} ,"Skills": [ {"name":"Python","type":"dev" }, {"name":"Golang","type":"dev" },{"name":"Ansible","type":"ops" },{"name":"Kubernetes","type":"dev" },{"name":"ElasticSearch","type":"ops" }]}'  | jq '[.Skills[].name ]' [  "Python",  "Golang",  "Ansible",  "Kubernetes",  "ElasticSearch" ] $ echo '{"Name":"CloudNativeOps","Owner":"GoOps","WebSite":"https://bgbiao.top/", "Contact": {"Email":"weichuangxxb@qq.com","QQ":"371990778","WeChat":"GoOps"} ,"Skills": [ {"name":"Python","type":"dev" }, {"name":"Golang","type":"dev" },{"name":"Ansible","type":"ops" },{"name":"Kubernetes","type":"dev" },{"name":"ElasticSearch","type":"ops" }]}'  | jq '[.Skills[].name,.Name]' [  "Python",  "Golang",  "Ansible",  "Kubernetes",  "ElasticSearch",  "CloudNativeOps" ] $ echo '{"num": [1,2,3,4]}' | jq '[.num[] | . * 2 ]' [  2,  4,  6,  8 ] ## 对象构建 ### jq '{Name,Owner,skills: .Skills[].name}' 构建新的json串 $ echo '{"Name":"CloudNativeOps","Owner":"GoOps","WebSite":"https://bgbiao.top/", "Contact": {"Email":"weichuangxxb@qq.com","QQ":"371990778","WeChat":"GoOps"} ,"Skills": [ {"name":"Python","type":"dev" }, {"name":"Golang","type":"dev" },{"name":"Ansible","type":"ops" },{"name":"Kubernetes","type":"dev" },{"name":"ElasticSearch","type":"ops" }]}' | jq '{Name,Owner,skills: .Skills[].name}' {  "Name": "CloudNativeOps",  "Owner": "GoOps",  "skills": "Python" } {  "Name": "CloudNativeOps",  "Owner": "GoOps",  "skills": "Golang" } {  "Name": "CloudNativeOps",  "Owner": "GoOps",  "skills": "Ansible" } {  "Name": "CloudNativeOps",  "Owner": "GoOps",  "skills": "Kubernetes" } {  "Name": "CloudNativeOps",  "Owner": "GoOps",  "skills": "ElasticSearch" } ###  jq '{(.Name) : .Skills[].name}' 构建无声明key 的json串 $ echo '{"Name":"CloudNativeOps","Owner":"GoOps","WebSite":"https://bgbiao.top/", "Contact": {"Email":"weichuangxxb@qq.com","QQ":"371990778","WeChat":"GoOps"} ,"Skills": [ {"name":"Python","type":"dev" }, {"name":"Golang","type":"dev" },{"name":"Ansible","type":"ops" },{"name":"Kubernetes","type":"dev" },{"name":"ElasticSearch","type":"ops" }]}' | jq '{(.Name) : .Skills[].name}' {  "CloudNativeOps": "Python" } {  "CloudNativeOps": "Golang" } {  "CloudNativeOps": "Ansible" } {  "CloudNativeOps": "Kubernetes" } {  "CloudNativeOps": "ElasticSearch" } ## 递归下降 使用 .. 可以将全部的子串解析出来,直到最后的叶子value $ echo '[[{"a":1}]]' | jq '.. ' [  [    {      "a": 1    }  ] ] [  {    "a": 1  } ] {  "a": 1 } 1 ### 递归下降获取具体的值 '.. | .filed' #### 获取key 包含a的值 $ echo '[[{"a":1}]]' | jq '.. | .a?' 1

2.4 内置的操作符以及函数

  • +: 两个过滤器相加,支持 Numbers、Arrays、Strings、Objects 类型
  • -: 相减,用法同上
  • *,/,%: 乘除余运算
  • length: 获取不同类型值的长度,支持 string,array,object,null(zero)
  • utf8bytelength: utf8 的字节长度
  • keys,keys_unsorted: 获取最外层的 key 以及排序之后的 key,如果是列表或者数组,将返回索引
  • has(key): 返回 json 中是否包含 key,或者数组 / 列表中是否包含索引下标 【需要注意的是,如果需要解析解析数组 / 列表内部的子串是否包含某个 key,需要先使用 map 函数】
  • in(object): 判断 json 中是否包含 object 中给定的 key
  • max(x),map_values(x): 使用过滤器 x 对输入数组的元素进行挨个计算,并返回新数组;后者是给值进行计算
  • path(path_expssion): 输出给定路径表达式中的数组表示。
  • del(path_expssion): 删除路径表达式中的 filed
  • getpath(PATHS): 获取指定路径的索引
  • setpath(PATHS; VALUE): 给指定路径设置新的值
  • delpaths(PATHS): 删除指定路径
  • to_entries, from_entries, with_entries: 二次处理 json 实体,比如从 [{key:k1,value: v1},{key:k2,value:v2} ] 转换成 {k1:v1,k2:v2}
  • select(boolean_expssion): 使用 bool 表达式进行条件过滤
  • arrays, objects, iterables, booleans, numbers, normals, finites, strings, nulls,

本文地址:百科问答频道 https://www.neebe.cn/wenda/942831_2.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


百科问答
小编:小易整编
相关文章相关阅读
  • 虚拟机关机命令poweroff方法

    虚拟机关机命令poweroff方法

    虚拟机是虚拟技术。许多用户将使用虚拟机上的命令自定义操作关机,使其方便快速,有更多的时间来处理其他事情,然后没有其他更容易的Poweroff应该不是命令?让我们来看看。虚拟机命令Poweroff方法首先,Poweroff.1,Powerof...

  • Dota单机常用命令

    Dota单机常用命令

    操作方法01在找不到队友一起开黑或者想一个人享受Dota虐人的时候,单机是个不错的选择,而且即使被电脑推到家里,也不怕会输掉比赛,因为我们有秘籍,问问电脑“whosyourdaddy”就可以完虐AI...

  • CAD怎么使用偏移命令

    CAD怎么使用偏移命令

    在使用CAD绘图时,我们必须学会使用CAD的各种操作命令,只有这样才能提高我们的工作效率,下面我们就来看看CAD偏移命令是如何使用的吧。操作方法01首先我们把CAD这款软件打开,然后在菜单里找到绘图里...

  • DIR命令怎么用

    DIR命令怎么用

    DIR命令用于显示磁盘目录所包括的内容。命令格式有:DIR[文件名][选项]。该命令有很多选项。例如:/A表示显示所有的文件(包括隐藏文件);/S表示显示指定目录和所以子目录下的文件;/B表示只显示文件名。操...

  • 手机蓝牙的作用和用法(手机蓝牙有什么用途)

    手机蓝牙的作用和用法(手机蓝牙有什么用途)

    每部手机上都有一个蓝牙功能,大家以前都会用它来传输文件,不过随着移动网络和WiFi的普及,这个功能也渐渐被大家忽略了。今天,我们就来科普一些手机蓝牙不为人知的功能,让大家可以更好的使用这一功能。1、传输文件传输文件,这一功能应该是大家最熟悉...

  • Ubuntu如何使用dpkg命令卸载软件

    Ubuntu如何使用dpkg命令卸载软件

      本经验以卸载Ubuntu下的办公软件libreoffice为例子,演示怎样使用dpkg进行卸载软件。  查看安装的软件  1、查看dpkg的帮助。  选择dpkg-l来查看软件的状态。  选择dpkg-P来卸载软件。因为dpkg...

  • 磁盘阵列raid5的用法

    磁盘阵列raid5的用法

    操作方法01在日常应用中,大多是把服务器上所有的硬盘创建RAID5,并且只划分了一个“逻辑磁盘”,这样从理论上来讲没有任何问题,在实际中也可以可以使用的,但是这种方法并不可取。RAID5是一种存储性...

  • C语言while语句的用法

    C语言while语句的用法

    while语句的一般形式为:while(表达式)语句其中表达式是循环条件,语句为循环体。#includeintmain(void){inti,sum=0;i=1;while(i...

  • 周排行
  • 月排行
  • 年排行

精彩推荐