首页 > 其他分享 >jq工具及其常用用法

jq工具及其常用用法

时间:2023-10-16 10:56:25浏览次数:49  
标签:city 常用 name age json jq 用法 JSON

近来在工作中处理JSON处理较多,深入研究了一下jq,之前对jq的使用一直停留在JSON数据格式化的层面,实际它的能力远不止于此。
在处理JSON数据时,我们经常需要在命令行中进行过滤、查询和编辑的操作。jq是一个强大的命令行JSON处理工具, 它可以让我们轻松地对JSON数据进行各种操作。本文将简要介绍jq的基本概念和常用功能,并提供一些实际的例子。

一、jq简介

jq是一个轻量级且灵活的命令行JSON处理器。它允许你基于键、值和数组索引来提取、过滤和修改JSON数据。jq主要有以下特性:

  1. 基于流式处理,适用于大型JSON数据文件。

  2. 提供了丰富的操作符和函数,与 Unix 的管道(pipe)和 I/O 重定向兼容。

  3. 支持条件过滤、字符串操作、数学运算和自定义函数等高级功能。

二、安装jq

在大多数Linux发行版上,可以通过包管理器轻松安装jq:

  • 在基于Debian的发行版上:

    sudo apt-get install jq
    
    
    
  • 在基于RHEL的发行版上:

    sudo yum install jq
    
    
    
  • 在Arch Linux上:

    sudo pacman -S jq
    
    
    
  • 在macOS上,可以使用Homebrew安装:

    brew install jq
    
    
    

三、常用jq用法

以下是jq的一些常见用法。

1. 读取属性值

要从输入的JSON对象中提取属性值,可以使用.操作符。

举例:有一个名为sample.json的文件,内容如下:

{
  "name": "Alice",
  "age": 30,
  "city": "New York"
}


提取名字:

cat sample.json | jq '.name'


输出结果:

"Alice"


2. 过滤数组元素

要对数组元素进行过滤,可以使用[]操作符。

举例:有一个名为students.json的文件,内容如下:

[
  {
    "name": "Alice",
    "age": 30,
    "city": "New York"
  },
  {
    "name": "Bob",
    "age": 25,
    "city": "San Francisco"
  },
  {
    "name": "Charlie",
    "age": 23,
    "city": "Los Angeles"
  }
]


提取所有名字:

cat students.json | jq '.[].name'


输出结果:

"Alice"
"Bob"
"Charlie"


3. 选择特定数组元素

如果要返回具有某些属性的特定元素,则可以使用选择器。例如,要选择年龄超过25岁的学生:

cat students.json | jq '.[] | select(.age > 25)'


输出结果:

{
  "name": "Alice",
  "age": 30,
  "city": "New York"
}


4. 排序和唯一化数组

可以使用sort,sort_by()unique函数对数组进行操作。

例如,对来自sample-array.json文件的年龄进行排序和去重:

[30, 20, 25, 30, 25, 20]


排序且去重:

cat sample-array.json | jq 'unique | sort'


输出结果:

[
  20,
  25,
  30
]


5. 修改数据

除了筛选和查询,jq还支持创建和修改数据。例如,为students.json中的每个学生添加 “isActive” 属性:

cat students.json | jq '.[] | {name, age, city, isActive: true}'


输出结果:

{
  "name": "Alice",
  "age": 30,
  "city": "New York",
  "isActive": true
}
{
  "name": "Bob",
  "age": 25,
  "city": "San Francisco",
  "isActive": true
}
{
  "name": "Charlie",
  "age": 23,
  "city": "Los Angeles",
  "isActive": true
}


四、总结

jq是个非常强大的命令行JSON处理工具,支持各种数据操作功能,能够帮助你在处理JSON数据时更加便捷和高效。本文列举了一些常用的jq使用案例,但jq的功能远不止于此。更多丰富的功能可以在官方文档(点击查看)中找到。 熟练掌握jq有助于提高命令行处理JSON数据的能力,为其它处理和分析工具提供更方便的数据源。

作者:京东物流 张涛

来源:京东云开发者社区 自猿其说Tech 转载请注明来源

标签:city,常用,name,age,json,jq,用法,JSON
From: https://www.cnblogs.com/jingdongkeji/p/17766867.html

相关文章

  • 常用JDBC数据库驱动包和类名
    MySQL数据库:  1)驱动包:https://mvnrepository.com/artifact/mysql/mysql-connector-java(下载路径)  2)驱动类名:com.mysql.jdbc.Driver  3)JDBC的URL:jdbc:mysql://IP地址:端口号/数据库名字   注:端口号缺省为:3306    SQLserver数据库:  1)驱动包:https......
  • 如果我有jQuery背景,是否应该学习AngularJS?
    内容来自DOChttps://q.houxu6.top/?s=如果我有jQuery背景,是否应该学习AngularJS?假设我熟悉在jQuery上开发客户端应用程序,但现在我想开始使用AngularJS。你能描述一下必要的范式转变吗?以下是一些问题,可能有助于你回答:我如何以不同的方式架构和设计客户端Web应用程序?最大的区......
  • 将复选框设置为已选中状态,使用jQuery
    内容来自DOChttps://q.houxu6.top/?s=将复选框设置为已选中状态,使用jQuery我想使用jQuery来选中一个复选框,就像这样:$(".myCheckBox").checked(true);或者$(".myCheckBox").selected(true);有这样的方法吗?现代jQuery使用.prop():$('.myCheckbox').prop('checked',......
  • 【Dotnet篇】Dotnet CLI常用命令
    dotnet--list-sdks//列出已经安装的sdk版本信息dotnet--list-sdksdotnet--list-runtimes//列出已经安装的运行时版本信息dotnet--list-runtimesdotnetnugetlistsource//这会列出当前配置的所有NuGet包源。dotnetnugetlistsource//添加新的NuGet包源do......
  • 常用cmd命令
    calc:启动计算器 Shutdown-s-t30:表示30秒后自动关机,中间带有空格。shutdown-a:取消定时关机Shutdown-r-t30:表示30秒后自动重新启动control:控制面版devmgmt.msc:设备管理器desk.cpl:屏幕辨别率diskmgmt.msc:磁盘管理dxdiag:检查DirectX信息explorer:资源管理器fsmgmt.......
  • linux的expect用法,用来跳过窗口交互性
    expect的核心是spawnexpectsendset spawn调用要执行的命令expect等待命令提示信息的出现,也就是捕捉用户输入的提示:send发送需要交互的值,替代了用户手动输入内容set设置变量值interact执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登......
  • 常用的相似度度量总结:余弦相似度,点积,L1,L2
    前言 相似性度量在机器学习中起着至关重要的作用。这些度量以数学方式量化对象、数据点或向量之间的相似性。理解向量空间中的相似性概念并采用适当的度量是解决广泛的现实世界问题的基础。本文将介绍几种常用的用来计算两个向量在嵌入空间中的接近程度的相似性度量。本文转载自......
  • Python 中 sys.argv 用法详解
    一、Pythonsys模块“sys”是“system”,是一个系统模块,该模块提供了一些接口,用户访问python解释器自身使用和维护的变量,同时模块中还提供了一些函数,而我们今天要讲解的argv就是其中一个函数。二、sys.argv上一篇文章我们讲到了引用模块,这里sys就相当于一个模块,而argv就是......
  • *【学习笔记】(7) 线段树及高级用法
    一.普通线段树线段树(SegmentTree)几乎是算法竞赛最常用的数据结构了,它主要用于维护区间信息(要求满足结合律)。与树状数组相比,它可以实现\(O(logn)\)的区间修改,还可以同时支持多种操作(加、乘),更具通用性。接下来我们用这道模板题为例,看看线段树是怎么维护区间和这一信息的。P33......
  • strapi系列-常用操作记录(创建中间件,创建关系型数据库,数据去掉attributes那一层)
    创建全局中间件创建关系型的数据https://docs.strapi.io/dev-docs/api/rest/relations{"product_types":{"connect":[10]},"product_tags":{"connect":[7,3,4]},"name":"TEST","......