热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux工具之jq

lin
简介

在linux下进行日常的开发时,我们经常需要对json格式的数据进行处理分析。jq是一个开源的JSON格式数据处理工具,它提供了很多灵活的语法,功能非常强大。

安装
  • macOS:
brew install jq
  • Ubuntu
apt-get install jq
  • 其他参考 官网
jq语法

基础用法

假设文本test_json中有如下字符串

{ "name":"xiaoming", "age":21, "birthday":"10th August", "email":"yj.xxxx@xxxx.com", "skills":[ { "name":"C++", "level":2 }, { "name":"Python", "level":1 } ] }

通过key筛选

jq 表达式

cat test_json | jq ".name"

输出

"xiaoming"

通过index筛选

jq 表达式

cat test_json | jq ".skills[0]"

输出

{ "name": "C++", "level": 2 }

遍历数组

jq表达式

cat test_json | jq ".skills[]"

输出

{ "name": "C++", "level": 2 } { "name": "Python", "level": 1 }

通过Pipe("|")筛选

jq表达式

cat test_json | jq ".skills[] | .level"

输出

2 1

构造数组Array

jq表达式

cat test_json | jq "[.age, .email]"

输出

[ 21, "yj.xxxx@xxxx.com" ]

构造Mapping

jq表达式

cat test_json | jq "{name, skills_2 : .skills}"

输出

{ "name": "xiaoming", "skills_2": [ { "name": "C++", "level": 2 }, { "name": "Python", "level": 1 } ] }

jq表达式

cat test_json | jq "{(.name): .skills}"

输出

{ "xiaoming": [ { "name": "C++", "level": 2 }, { "name": "Python", "level": 1 } ] }

内建操作符和函数

加法

jq表达式

cat test_json | jq ".age + 1"

输出

22

字符拼接

cat test_json | jq ".age + .name"

输出

"yj.xxxx@xxxx.comxiaoming"

减法 -

jq表达式

echo '["xml", "yaml", "json"]' | jq '. - ["xml", "yaml"]'

输出

[ "json" ]

Length

jq表达式

echo '[[1,2], "string", {"a":2}, null]' | jq '[.[]| length]'

输出

[ 2, 6, 1, 0 ]

keys

jq表达式

cat test_json | jq 'keys'

输出

[ "age", "birthday", "email", "name", "skills" ]

in

jq表达式

echo '["foo", "bar"]' | jq '.[] | in({"foo": 42})'

输出

true false

map

jq表达式

echo '[1,2,3]' | jq 'map(.+1)'

输出

[ 2, 3, 4 ]

map_values

jq表达式

echo '{"a": 1, "b": 2, "c": 3}' | jq 'map_values(.+1)'

输出

{ "a": 2, "b": 3, "c": 4 }

del

js表达式

echo '{"foo": 42, "bar": 9001, "baz": 42}' | jq "del(.foo)"

输出

{ "bar": 9001, "baz": 42 }

select

jq表达式

echo '[{"id": "first", "val": 1}, {"id": "second", "val": 2}]' | jq '.[] | select(.id == "second")'

输出

{ "id": "second", "val": 2 }

any

jq 表达式

echo '[true, false]' | jq 'any'

输出

true

all

jq表达式

echo '[true, false]' | jq 'all'

输出

false

min、max

jq表达式

echo '[5,4,2,7]' | jq 'min'

输出

2

sort、sort_by

jq表达式

echo '[8,3,null,6]' | jq 'sort'

输出

[ null, 3, 6, 8 ]

jq表达式

echo '[{"foo":4, "bar":10}, {"foo":3, "bar":100}, {"foo":2, "bar":1}]' | jq 'sort_by(.foo)'

输出

[ { "foo": 2, "bar": 1 }, { "foo": 3, "bar": 100 }, { "foo": 4, "bar": 10 } ]

index

jq表达式

echo '["a","b", "c"]' | jq 'index("b")'

输出

1

json

jq 表达式

echo '["a","b","c"]' | jq 'join(";")'

输出

"a;b;c"

条件判断

jq 表达式

echo 2 | jq 'if . == 0 then "zero" elif . == 1 then "one" else "many" end'

输出

"many"
参考
  • 官方参考文档

推荐阅读
  • linux filesystem_如何使用cgdb + qemu调试linux内核模块
    如何使用cgdbqemu调试linux内核模块前言Linux代码庞大而繁杂,光看代码会使人头晕目眩,如果能通过调试工具对其代码执行流程进行调试ÿ ... [详细]
  • 标签PostgreSQL,Linux,perf,性能诊断,stap,systemtap,strace,dtrace,dwarf,profiler,perf_events,probe ... [详细]
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • linux树莓派和n1,树莓派 斐讯N1 搭建NFS
    什么是NFS?1台Linux主机的磁盘可以通过网络挂载到其他Linux主机上,实现云盘效果。NFS是一套软件和协议,同时也是一种文件系统& ... [详细]
  • 跪服!大四学生开发了一整套文言编程
    机器之心报道参与:思、Jamin用文言文写的官方编程教程《文言陰符》,类似pip那样的包管理工具「文淵閣」,还有文言编程开源IDE「文言齋 ... [详细]
  • helm V3版本
    1、引入(1)之前方式部署应用基本过程*编写yaml文件**deployment**Service**Ingress(负载均衡、 ... [详细]
  • 为什么80%的码农都做不了架构师?#0系列目录#聊聊远程通信Java远程通讯技术及原理分析聊聊Socket、TCPIP、HTTP、FTP及网 ... [详细]
  • 启动监控MonitorTables主要存储一些监控信息(当前运行的SQL,IO统计信息,当前进程情况)比如monDevic ... [详细]
  • 基于Python PaddleSpeech实现语音文字处理
    基于Python PaddleSpeech实现语音文字处理-目录前言环境安装项目验证tts语音合成asr语音识别标点恢复总结前言这段时间一直在研究飞浆平台,最近试了试PaddleS ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • FluxCD、ArgoCD或Jenkins X,哪个才是适合你的GitOps工具?
    GitOps是一种使用基于Git的工作流程来全面管理应用和基础设施的想法,其在最近获得了极大关注。新一代的部署工具更能说明这一点,它们将GitOps作为 ... [详细]
  • 先下载linuxhttp:cdimage.ubuntu.comreleases14.04release我下载的是ubuntu-14.04.3-desktop-amd64mac.is ... [详细]
  • 本篇内容主要讲解“JavaScript在网页设计中的嵌入应用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小 ... [详细]
  • hadoop完全分布式搭建
    原文链接:hadoop完全分布式搭建主机分配以及地址要求:角色主机名IP地址Namenodemaster192.168.222.201Datanodeslave ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
author-avatar
手机用户2502875333
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有