转换json并使用jq使其可读

需要对大量的JSON数据进行排序吗?学习如何使用jq使其可读和有用。...

JavaScript对象表示法(JSON)是世界上最流行的数据格式之一。它有广泛的支持和一个简单的规范。在许多编程语言中使用它很容易,特别是那些针对web开发的语言。

A stylised, rotated screenshot of some JSON data

但是手工检查JSON数据仍然很尴尬。尽管JSON数据集是一种人类可读的文本格式,但它可能包含大量的数据。源代码并不总是以易于阅读的形式格式化JSON。

javajq工具允许用户格式化、过滤和转换JSON数据。

什么是jq公司(jq)?

因为它是一个命令行工具,所以通常使用jq的方法是在终端中键入命令。还有一个很好的在线游乐场,我们将在下面详细介绍。

正常的操作是围绕过滤器和过滤器对一些输入JSON的应用。您可以使用jq从多个项目的集合中获取单个项目。或者可以从集合中的每个项中删除某些字段,从而简化数据。您甚至可以执行复杂的操作,将输入转换为不同的形式。

如何下载和安装jq

jq程序没有外部依赖性,这意味着它很容易启动。首先通过jq主页上的按钮下载Linux、macOS或Windows的可执行二进制文件。一旦下载了程序,就可以直接从命令行运行它。为了方便起见,您可能需要重命名它(mvjq-osx-amd64 jq),并且您可能需要使它可执行(chmod+xjq)。

通过从命令行不带参数地执行jq,确认可以运行jq:

$ ./jq

您应该看到一些常规用法信息,从一个简单的单行摘要开始,例如:

jq - commandline JSON processor [version 1.6]

如果你挣扎于上述方法,还有其他选择。jq软件支持常见的包管理器,您可以同时尝试在线沙盒。

jq基本用法

标准用法是:

jq [opti***] <jq filter> [file...]

例如:

$ jq '.' data.json

您也可以通过另一个命令导入输入,例如:

$ echo '{"name":"john"}' | jq '.'{ "name": "john"}

例如,当第一个命令类似于对curl的调用时,这是最有用的,curl可以从web服务获取JSON数据。

这些示例中显示的过滤器是最简单的。(一个句点),它以漂亮的形式打印输入。这已经非常有用了,但是jq的滤波器提供的功率远远超过这个。

如何使用jq对json应用基本过滤器

jq过滤器有点像CSS选择器或XPATH表达式。它是一个由小部分组成的长表达式。一个完整的过滤器看起来可能很复杂,但是一旦你学会了基本知识,每个部分都应该是可以理解的。

使用对象

可以使用.property语法获取对象属性的值:

$ echo '{"name":"john"}' | jq '.name'"john"

这可以链接访问深层嵌套结构:

$ echo '{"name":{"first":"john","last":"**ith"}}' | jq '.name.last'"**ith"

使用阵列

最简单的数组操作通过其索引返回一个元素:

$ echo '[1,2,3]' | jq '.[2]'3

注意,与大多数编程语言一样,jq从位置0开始索引数组。也可以使用以下语法对子阵列进行切片:

$ echo '[1,2,3]' | jq '.[1:3]'[ 2, 3]

在方括号内没有索引的情况下,jq将单个数组值转换为自己的内容,即多个值:

$ echo '[1,2,3]' | jq '.[]'123

这是将过滤器链接在一起的一种重要方法,我们将在后面介绍。

更高级的功能

只有通过阅读jq手册,你才能全面了解jq的力量。实际上,jq对操作符、变量甚至用户定义函数的支持使它能够像任何编程语言一样工作。

这些特性使高级使用成为可能,尽管很复杂。但是jq有一些内置的特性,比如函数和操作符,即使是简单的任务也能从中受益。举个例子:

$ echo '[2,4,8]' | jq 'add / length'4.666666666666667

这个过滤器将输入输入输入add和length函数,并对结果进行分割。在运算中,它计算一组数字的平均值。

除法运算符还可以作用于字符串,以便根据分隔符将其拆分:

$ echo '"Just testing"' | jq '. / " "'[ "Just", "testing"]

select函数过滤数组,只保留那些通过给定约束的项:

$ echo '[2,4,8]' | jq '.[] | select(. >= 3)'48

请注意,这也是jq的管道操作符(|)的一个示例,它类似于shell的管道。它将其左侧过滤器的结果作为右侧过滤器的输入。

map函数在处理数组时非常有用。它对数组的每个元素而不是整个数组本身执行操作:

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

您经常将它与select结合使用,例如。

$ echo '[2,4,8]' | jq 'map(select(. >= 3))'[ 4, 8]

把它们放在一起:一个实用的jq例子

由于jq处理任何通过管道传输到它的有效JSON,因此可以通过curl命令向它发送输出。这允许您从URL获取JSON并立即在命令行上处理它:

JSON提要是RSS和Atom格式的JSON替代品。NPR站点就是一个支持JSON提要的例子,但很难从源代码查看,并且包含大量数据:

NPR feed

很快,您就可以看到,通过获取这些数据并通过jq进行管道传输,读取起来是多么容易:

$ curl -s https://feeds.npr.org/1019/feed.json | jq '.'

Prettified NPR feed

下面是一个更完整的过滤器示例,它获取站点在星期二发布的每个故事的id、标题和日期。

$ curl -s https://feeds.npr.org/1019/feed.json |jq '.items | .[] | select( .date_published | .[0:19] + "Z" | fromdate | strftime("%a") == "Tue" ) | {id: .id, title:.title, date:.date_published}'

选择items属性后,此筛选器使用。[]迭代每个项。筛选器的主要部分使用select函数仅保留那些具有date\u published值且其工作日(strftime(“%a”)为周二的文章。strftime函数需要过滤器[0:19]+“Z”构造的格式非常明确的日期。

在选择所需的项之后,最终的过滤器为每个项构建一个对象,其中包含必需的字段。请注意,每次feed发生变化时,结果都会有所不同。以下是出版时的一个例子:

{ "id": "959667930", "title": "Deplatforming: Not A First Amendment Issue, But Still A Tough Call For Big Tech", "date": "2021-01-26T17:00:00-05:00"}{ "id": "960679189", "title": "My Pillow CEO Mike Lindell Permanently Suspended From Twitter", "date": "2021-01-26T10:17:15-05:00"}{ "id": "960220477", "title": "Is Your 401(k) Colluding To Make Cereal More Expensive?", "date": "2021-01-26T06:31:24-05:00"}

另请参见:JSON Python解析:简单指南

如何使用jqplay在线处理json

如果您想在下载jq之前试用它,jqplay是一个完美的开始。通过一个简单的界面,站点允许您输入示例JSON和过滤器,然后查看结果。

它还允许您尝试几个不同的选项。其中包括--compact output(删除空白)和--null input(显示缺少输入的结果)。

该界面还包括一个非常有用的备忘部分。下面是前一个长示例的屏幕截图:

A screenshot of the jq play online playground

请注意,与该链接一样,您也可以通过URL共享示例。

使用jq读取和操作json数据

你可以从jq网站上的教程和手册中找到关于jq的完整信息。程序本身通过--help选项提供有限的帮助。

如果您想执行基本的过滤和转换,或者读取大量的JSON,jq是一个很有价值的工具。

  • 发表于 2021-03-27 02:07
  • 阅读 ( 201 )
  • 分类:编程

你可能感兴趣的文章

json-python解析:简单指南

...有一个包含JSON数据的字符串时,可以使用以下命令将其转换为python对象(或列表): ...

  • 发布于 2021-03-13 11:20
  • 阅读 ( 289 )

将主页上的天气数据与weatherstack api集成

...个伟大的切入点,以商业用途的服务。简而言之,您可以使用weatherstack API发布应用程序或服务,并可能从中赚钱。 ...

  • 发布于 2021-03-19 09:24
  • 阅读 ( 207 )

使用以下10个基本工具提升您的web开发技能

... ObjGen在左侧窗口中获取输入,并在右侧窗口中将其转换为JSON,后者保存在浏览器中,或保存一个JSON文件供以后使用。非常适合任何学习数据可视化和全栈web开发的人。 ...

  • 发布于 2021-03-20 14:01
  • 阅读 ( 226 )

如何将excel工作表另存为pdf

...纸的特定部分,或者不希望其可编辑。但是,将Excel文件转换为PDF可能有点棘手。 我们通常不认为Excel电子表格是有边框、页面和页边距的文档。然而,当涉及到将这些文件转换成可以阅读、打印或分发给其他人的PDF文档时,您...

  • 发布于 2021-04-02 09:01
  • 阅读 ( 323 )

如何将powerpoint转换为word并使其可编辑

...众讲义。您可以从Microsoft PowerPoint打印这些文档,但通过转换为Word文档,您可以使用Word功能丰富的格式工具集来美化这些文档。 打开PowerPoint文件,转到“文件”选项卡,然后从侧边栏中选择“导出”。 在“导出”菜单下,选...

  • 发布于 2021-04-03 10:01
  • 阅读 ( 136 )

如何使用bash从subreddit中获取主题列表

...述内容的层次结构和数组的成员资格,以及数据应该如何转换。让我们用正确的表达式再次运行整个命令: curl -s -A “reddit scraper example” https://www.reddit.com/r/MildlyInteresting.json | jq ‘.data.children | .[] | .data.title, .data.url, .data.permalink...

  • 发布于 2021-04-03 18:06
  • 阅读 ( 207 )

如何从bash脚本获取系统的地理位置

您可以使用openapi和简单的bash脚本找到远程Linux系统的地理位置。地理定位服务器可以帮助您在物理世界中跟踪它,确保服务器位于区域热点。 internet上的每台服务器都有一个面向公众的IP地址。这可以直接分配给服务器,也可以...

  • 发布于 2021-04-03 22:58
  • 阅读 ( 284 )

如何下载、删除或暂停您的谷歌搜索历史记录

...难以理解。为此,我们使用了一个简单的网站,将时间戳转换成简单的英语。我们首先将时间戳粘贴到框中,然后单击“转换为日期” 注意,第一次输入时间戳时,它会错误地转换日期。这是因为搜索历史记录中的时间戳太长...

  • 发布于 2021-04-10 20:37
  • 阅读 ( 177 )

如何从googlereader导出带星号的项目

...卖下载的原始档案)放在一个安全的地方。 将星光项目转换为书签 处理JSON文件最简单的方法之一是使用JSONview(一个可用于Firefox和Chrome的扩展名)。这种方法最适合在googlereader中有少量星号项目(少于1000个)的读者。 为各自...

  • 发布于 2021-04-11 21:25
  • 阅读 ( 191 )

如何用jq解析linux命令行上的json文件

...之一。到处都是,你一定会遇到的。我们将向您展示如何使用jq命令从Linux命令行处理它。 json和jq JSON代表JavaScript对象表示法。这是一种允许数据以自我描述的方式编码成纯文本文件的方案。JSON文件中没有注释,内容应该是不...

  • 发布于 2021-04-14 19:24
  • 阅读 ( 254 )
无节操王子
无节操王子

0 篇文章

相关推荐