一.使用 python -m json.tool

cat test.json | python -m json.tool

二.jq格式化

在web 2.0时代json这种直观、灵活、高效数据格式基本已经成为一种标准格式,从各种web api,到配置文件,甚至现在连mysql都开始支持json作为数据类型。

但是在平时开发运维中往往因为格式问题或者输出数据太多,体验不是很爽,之前我就经常需要借助一些json自动语法检查、格式化、分层折叠的工具(如http://www.bejson.com/ ), 往往还是需要来回拷贝,还是觉得很麻烦。

所以,一直希望有个linux命令行的简单命令(python的json.tool模块只能格式化显示),偶然发现了这个jq的小工具,感觉很强大,就分享一下。

不说废话了,直接例子说明吧

1、格式化json数据

echo '{"kind": "Service", "apiVersion": "v1", "status": {"loadBalancer": true}}'|jq .
{
"kind": "Service",
"apiVersion": "v1",
"status": {
"loadBalancer": true
}
}

只要3个字母搞定,其中jq是工具命令,后面参数是过滤选择参数,"." 表示直接输出完整的json数据。

Usage: jq [options] [file...]

2. 过滤出需要的字段信息

cat service.json
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "kubernetes",
"namespace": "default",
},
"spec": {
"ports": [
{
"protocol": "TCP",
"port": 443,
"targetPort": 443,
"nodePort": 0
}
],
.....很多数据
}
cat service.json|jq .metadata.name
"kubernetes"

3、过滤出某个数组对象

cat service.json|jq .spec.ports[0]
{
"protocol": "TCP",
"port": 443,
"targetPort": 443,
"nodePort": 0
}

4、使用管道过滤并调整输出

cat service.json|jq  ".spec.ports[0]| {srcPort: .port, targetPort: .targetPort}"
{
"srcPort": 443,
"targetPort": 443
}

如果数据的下标为不填,将输出所有数组的过滤值,如 cat service.json|jq ".spec.ports[]| {srcPort: .port, targetPort: .targetPort}"

5、 自定义输出数组

cat t.json
{
"parents": [
{
"sha": "54b9c9bdb225af5d886466d72f47eafc51acb4f7",
"url": "https://api.github.com/repos/stedolan/jq/commits/54b9c9bdb225af5d886466d72f47eafc51acb4f7",
"html_url": "https://github.com/stedolan/jq/commit/54b9c9bdb225af5d886466d72f47eafc51acb4f7"
},
{
"sha": "8b1b503609c161fea4b003a7179b3fbb2dd4345a",
"url": "https://api.github.com/repos/stedolan/jq/commits/8b1b503609c161fea4b003a7179b3fbb2dd4345a",
"html_url": "https://github.com/stedolan/jq/commit/8b1b503609c161fea4b003a7179b3fbb2dd4345a"
}
]
}
cat t.json|jq ' { html_urls: [.parents[].html_url]}'
{
"html_urls": [
"https://github.com/stedolan/jq/commit/54b9c9bdb225af5d886466d72f47eafc51acb4f7",
"https://github.com/stedolan/jq/commit/8b1b503609c161fea4b003a7179b3fbb2dd4345a"
]
}

6、支持条件查询

举个简单例子,只输出tcp协议端口信息

cat service.json|jq .spec.ports[0]
{
"protocol": "TCP",
"port": 443,
"targetPort": 443,
"nodePort": 0
}
cat service.json |jq 'if .spec.ports[0].protocol = "tcp" then .spec.ports[0] else "not tcp" end'

注意jq 的语法有点奇怪, 必须 if else 同时存在,数字相等是用 "==",字符串是"="

总之,jq 功能是很强大的,它是一个c语言写的小工具,包括很多正则匹配,更多高级使用方法,见 https://stedolan.github.io/jq/manual/

安装说明

Debian and Ubuntu 下

   sudo apt-get install jq

OS X 下

    brew install jq

CentOs

   yum install -y jq

源码安装

   git clone https://github.com/stedolan/jq.git

cd jq
autoreconf -i
./configure --disable-maintainer-mode
make
sudo make install

windows下也可以直接下载,但是没用过。 详细见https://stedolan.github.io/jq/download/

转自:https://sq.163yun.com/blog/article/197406979988197376

linux下格式化json文件数据的更多相关文章

  1. linux 下查看json 文件 使用jq工具

    安装 文档 yum 安装 yum search jq yum -y install jq.x86_64 apt-get install jq jq支持查看 jq . json 文件 查看json文件 ...

  2. 【转载】在Linux下,一个文件也有三种时间,分别是:访问时间、修改时间、状态改动时间

    在windows下,一个文件有:创建时间.修改时间.访问时间.而在Linux下,一个文件也有三种时间,分别是:访问时间.修改时间.状态改动时间. 两者有此不同,在Linux下没有创建时间的概念,也就是 ...

  3. Linux下几种文件传输命令 sz rz sftp scp

    Linux下几种文件传输命令 sz rz sftp scp 最近在部署系统时接触了一些文件传输命令,分别做一下简单记录: 1.sftp Secure Ftp 是一个基于SSH安全协议的文件传输管理工具 ...

  4. Linux下Rsync+sersync实现数据实时同步

    inotify 的同步备份机制有着缺点,于是看了sersync同步,弥补了rsync的缺点.以下转自:http://www.osyunwei.com/archives/7447.html 前言: 一. ...

  5. [原创] Linux下几种文件传输命令 sz rz sftp scp介绍

    Linux下几种文件传输命令 sz rz sftp scp介绍 1.sftp Secure Ftp 是一个基于SSH安全协议的文件传输管理工具.由于它是基于SSH的,会在传输过程中对用户的密码.数据等 ...

  6. Linux下校验下载文件的完整性(MD5,SHA1,PGP)

    查看: Linux下校验下载文件的完整性(MD5,SHA1,PGP) http://blog.useasp.net/archive/2014/03/29/use-md5-sha1-or-pgp-to- ...

  7. 【转】 Linux内核中读写文件数据的方法--不错

    原文网址:http://blog.csdn.net/tommy_wxie/article/details/8193954 Linux内核中读写文件数据的方法  有时候需要在Linuxkernel--大 ...

  8. Linux下重要日志文件及查看方式

    http://os.51cto.com/art/201108/282184_all.htm   1.Linux下重要日志文件介绍 /var/log/boot.log 该文件记录了系统在引导过程中发生的 ...

  9. Sencha touch 2 入门 -------- DataView 显示服务器端JSON文件数据

    今天学习了下DataView如何显示JSON文件数据,废话不多说,直接贴代码: 首先看下文件目录: 然后看下我们要处理的JSON文件,bookInfo.json. { "success&qu ...

随机推荐

  1. java 语言基础作业

    1.动手动脑 仔细阅读示例: EnumTest.java,运行它,分析运行结果? 程序运行结果: 实验结论:枚举类型是引用类型!枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象.相同的值则引 ...

  2. 使用 DML语句针对仓库管理信息系统,进行查询操作

    查看本章节 查看作业目录 需求说明: 查询所有电视机产品的基本信息,要求显示产品编号.产品名和进货单价 查询所有产品的基本信息,要求按类型升序.价格降序显示查询信息 显示所有不重复的产品类型 显示进货 ...

  3. Java面向对象笔记 • 【第5章 异常处理】

    全部章节   >>>> 本章目录 5.1 异常概述 5.1.1 程序中的异常 5.1.2 异常分类 5.1.3 实践练习 5.2 try-catch处理异常 5.2.2 使用f ...

  4. java -jar 指定logback.xml、application.yaml

    java -jar 指定logback.xml -Dlogging.config="C:\logbacs\logback.xml" 示例:java -jar   -Dlogging ...

  5. Jedis 基本使用

    引入 jedis 依赖: <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <!-- Dec 15, 2 ...

  6. hadoop 之 常用基本操作

    HDFS 常用命令(hadoop fs.hadoop dfs.hdfs dfs): hadoop fs -ls 显示当前目录结构,-ls -R 递归显示目录结构 hadoop fs -mkdir 创建 ...

  7. Nginx 防爬虫设置

    在conf下  vi 一个文件agent_deny.conf 添加如下内容 #禁止Scrapy|curl等工具的抓取 if ($http_user_agent ~* (Scrapy|Curl|Http ...

  8. MySQL删除数据库或表(DROP DATABASE/table语句)

    DROP DATABASE [ IF EXISTS ] <数据库名> DROP table[ IF EXISTS ] <数据库表名> 语法说明如下: <数据库名>: ...

  9. Linux上天之路(六)之Linux文件管理

    文件与文件夹的操作 1) 新建 2)改名 3)查看 4)删除 5)拷贝 6)移动 1. 文件的操作 文件的新建:touch filename 文件的改名:mv 文件的查看:ls 文件内容的查看:cat ...

  10. vue 因为使用scope后选择器和标签出现[data-v

    使用scope的以后出现datd-v,例如: <div data-v-2311c06a class="button-warp"> <button data-v-2 ...