,,Linux 命令行工具解析和格式化输出 JSON的方法

,,Linux 命令行工具解析和格式化输出 JSON的方法

本文主要介绍Linux命令行工具分析和打印格式JSON的方法。有需要的朋友可以参考一下。

JSON是一种轻量级的与语言无关的数据存储格式,易于与大多数编程语言集成,并且易于人类理解3354。当然,如果格式正确的话。JSON这个词代表JavaScript o object n o station。虽然它是从JavaScript开始的,主要用于服务器和浏览器之间的数据交换,但现在它已经被用于许多领域,包括嵌入式系统。这里,我们将使用Linux上的命令行工具来解析和格式化打印的JSON。它对于处理shell脚本中的大型JSON数据或shell脚本中的JSON数据非常有用。

什么是格式化输出?

JSON数据的结构更加人性化。但是在大多数情况下,JSON数据将被存储在一行中,甚至没有行尾字符。

显然,这对于人工阅读和编辑是不方便的。

这是打印格式漂亮的打印,这是非常有用的。名称本身就说明了问题:重新格式化JSON文本,让人们更清楚地阅读它。这被称为JSON打印格式。

用 Linux 命令行工具解析和格式化输出 JSON

您可以使用命令行文本处理器解析JSON数据,比如awk、sed和gerp。实际上,JSON.awk是一个完成这项工作的awk脚本。然而,也有一些特殊的工具可以用于相同的目的。

Jq或者jshon,shell下的JSON解析器,都很有用。

Shell脚本,如JSON.sh或jsonv.sh,用于在bash、zsh或dash shell中解析JSON。

JSON.awk,JSON解析器的awk脚本。

像json.tool这样的Python模块

Undercore-cli,基于Node.js和javascript。

在本教程中,我只关注jq,它是一个shell下非常强大的JSON解析器,具有高级过滤和脚本功能。

JSON 格式化输出

JSON数据可能很难在一行中读取,因此为了使其可读,可以使用JSON打印格式。

示例:对于来自jsonip.com的数据,使用curl或wget工具获取JSON格式的外部IP地址,如下所示。

$ wget-CQ http://jsonip.com/-O-

实际数据如下所示:

{'ip':'111.222.333.444 ','关于':'/关于','亲!':http://getjsonip.com}

现在使用jq来打印格式化它:

$ wget-CQ http://jsonip.com/-O-| jq ' '

通过jq过滤结果后,它应该看起来像这样:

{

ip': '111.222.333.444 ',

关于':'/关于',

“亲!”:' http://getjsonip.com '

}

也可以通过Python json.tool模块来完成。例子如下:

$ cat any thing . JSON | python-m JSON . tool

这种基于Python的解决方案对大多数用户来说应该没问题,但如果Python没有预装或不能安装,比如在嵌入式系统上,就不合适了。

但是,json.tool Python模块有明显的优势。它是跨平台的。因此,您可以在Windows、Linux或Mac OS上无缝使用它。

如何用 jq 解析 JSON

首先,您需要安装jq,大多数GNU/Linux发行版都选择jq,并使用各自的包安装程序命令进行安装。

在Arch Linux上:

$ sudo pacman -S jq

在Debian、Ubuntu、Linux Mint上:

$ sudo apt-get安装jq

关于Fedora:

$ sudo dnf安装jq

在openSUSE上:

$ sudo zypper安装jq

对于其他操作系统或平台,请参考官方安装说明。

jq 的基本过滤和标识符功能

Jq可以从STDIN或文件中读取JSON数据。可以根据情况使用。

单个符号是最基本的过滤器。这些过滤器也被称为对象标识符-索引。Jq使用单个。过滤器,基本相当于输入JSON文件的打印格式。

单引号:你不必总是使用单引号。但是如果你把几个滤镜组合成一排,那么你就不得不使用它们。

双引号:必须用两个双引号括起任何特殊字符,如@、#、$等,例如jq.foo. "@ bar "。

原始数据打印:无论出于什么原因,如果您只需要最终解析的数据(不包括在双引号中),请使用带有-r标志的jq命令,如下所示:jq -r .foo.bar

解析特定数据

要过滤掉JSON的特定部分,需要知道打印格式的JSON文件的数据层次结构。

来自维基百科的JSON数据示例:

{

名字':'约翰',

姓氏':'史密斯',

'年龄':25,

地址':{

街道地址': '第二街21号',

城市':'纽约',

州':'纽约',

邮政编码:“10021”

},

电话号码':[

{

键入':' home ',

号码':' 212 555-1234 '

},

{

键入':'传真',

号码':' 646 555-4567 '

}

],

性别':

类型':'男性'

}

}

在本教程中,我将使用这个JSON数据作为示例,并将其保存为sample.json

假设我想从sample.json文件中过滤出地址。所以命令应该是这样的:

$ jq。地址sample.json

示例输出:

{

街道地址': '第二街21号',

城市':'纽约',

州':'纽约',

邮政编码:“10021”

}

同样,我想要邮政编码,然后我想添加另一个对象标识符——index,即另一个过滤器。

$ cat sample . JSON | jq . address . postal code

还要注意,过滤器是区分大小写的,您必须使用完全相同的字符串来获得有意义的输出,否则它就是null。

从 JSON 数组中解析元素

JSON数组的元素用方括号括起来,这无疑是很常见的。

要解析数组中的元素,必须使用[]标识符和其他对象标识符索引。

在这个JSON数据示例中,电话号码存储在一个数组中。要从该数组中获取所有内容,只需使用括号,如下例所示:

$ jq。电话号码[] sample.json

假设您只想要数组的第一个元素,然后使用从0开始的数组对象编号。对于第一项,使用[0],对于下一项,每一步都要增加1。

$ jq。电话号码[0] sample.json

脚本编程示例

假设我只想要家庭电话,而不是整个JSON数组数据。这就是编写jq命令脚本的便利之处。

$ cat sample.json | jq -r '。phoneNumber[] | select(。type=='home') |。'编号'

首先,我将一个过滤器的结果传递给另一个过滤器,然后使用select属性选择特定类型的数据,并将结果再次传递给另一个过滤器。

解释每种类型的jq过滤器和脚本编程超出了本教程的范围和目的。强烈建议您阅读jq手册,以便更好地理解以下内容。

资源:

https://stedolan.github.io/jq/manual/

http://www.compciv.org/recipes/cli/jq-for-parsing-json/

https://lzone.de/cheat-sheet/jq

via:https://www . ostechnix . com/how-to-parse-and-pretty-print-JSON-with-Linux-command line-tools/

总结

以上是边肖介绍的Linux命令行工具分析和打印格式JSON的方法。希望对你有帮助。如果您有任何问题,请给我留言,边肖将及时回复您。非常感谢您对我们网站的支持!

如果你觉得这篇文章对你有帮助,请转载,请注明出处,谢谢!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 使用js实现数据格式化命令,使用js实现数据格式化的方法
  • 使用js实现数据格式化命令,使用js实现数据格式化的方法,使用js实现数据格式化
  • sql 时间格式化函数怎么用,sqlserver时间格式化函数
  • sql 时间格式化函数怎么用,sqlserver时间格式化函数,SQL 时间格式化函数
  • Linux磁盘格式化命令,linux格式化整个磁盘的命令
  • Linux磁盘格式化命令,linux格式化整个磁盘的命令,Linux磁盘格式化命令详解
  • js获取当前日期并格式化,js获取当前时间年月日并输出
  • js获取当前日期并格式化,js获取当前时间年月日并输出,JS获取当前时间的年月日时分秒及时间的格式化的方法
  • js格式化时间的方法是什么,js 格式化时间
  • js格式化时间的方法是什么,js 格式化时间,js格式化时间的方法
  • js格式化时间格式,js格式化时间字符串
  • js格式化时间格式,js格式化时间字符串,JS格式化时间的几种方法总结
  • js中时间格式化的几种方法有哪些,js中时间格式化的几种方法是什么
  • js中时间格式化的几种方法有哪些,js中时间格式化的几种方法是什么,js中时间格式化的几种方法
  • windows命令行格式化硬盘,格式化将清除磁盘中的所有文件
  • 留言与评论(共有 条评论)
       
    验证码: