我是靠谱客的博主 落后航空,最近开发中收集的这篇文章主要介绍命令行 JSON 处理工具 jq 的使用命令行 JSON 处理工具 jq 的使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

命令行 JSON 处理工具 jq 的使用

Shell 有许多常用的文本处理工具,如 sedgreptr 等。然而,对于 JSON 数据的处理,这些工具并不是非常合适。jq 则是一个专门处理 JSON 数据的命令行工具,它可以很容易地对 JSON 数据进行切分、过滤、映射和转换等操作。因此,使用 jq 来处理 JSON 数据是一个非常不错的选择。

本文通过几个使用示例来对 jq 进行简单介绍。

一、提高 JSON 数据的可读性

使用 curl 从网络爬取的或者来自某个文件的一段 JSON 数据通常是紧凑而难以阅读的。jq 最常用的用法就是将这些『难看』的文本数据以友好的方式打印出来。

假设有一个包含以下 JSON 数据的 names.json 文件。


[{"id": 1, "name": "Arthur", "age": "21"},{"id": 2, "name": "Richard", "age": "32"}]

jq 使用最简单的 . 过滤器来打印这些数据。它不会改变数据内容,只会格式化数据结构来提高文本数据的可读性。


$ jq '.' names.json [ { "id": 1, "name": "Arthur", "age": "21" }, { "id": 2, "name": "Richard", "age": "32" } ]

二、获取对象成员

JSON 数据中的对象是由一对花括号{}以及被花括号所包围的 0 个或多个键值对(成员)构成。要获取某个成员值,就需要提供对应的键名。

假如有一个包含以下 JSON 数据的 dog.json 文件。


{ "name": "Buster", "breed": "Golden Retriever", "age": "4", "owner": { "name": "Sally" }, "likes": [ "bones", "balls", "dog biscuits" ] }

jq 使用 .name 过滤器获取第一层对应的成员值,可以用 , 逗号将过滤器隔开以获取多个成员值。


$ jq '.name' dog.json "Buster" $ jq '.breed,.age' dog.json "Golden Retriever" "4"

使用 .owner.name 链式过滤器获取第二层对应的成员值。


$ jq '.owner.name' dog.json "Sally"

三、获取数组元素

jq 使用 .[index] 下标法获取数组中的元素,下标从 0 开始。


$ jq '.likes[0]' dog.json "bones"

也可以使用 .[start:end] 过滤器对数组进行切片操作。


$ echo '["a","b","c","d","e"]' | jq '.[2:4]' [ "c", "d" ]

四、连接多个过滤器

jq 可以使用 | 管道连接多个过滤器,进行数据的多重过滤。


$ jq '.[] | .name' names.json "Arthur" "Richard"

其实,.[] | .name 过滤效果等价于 .[].name

六、构造 JSON 数据

jq 不仅可用于读取 JSON 数据,也可将 JSON 数据转换成一种新的 数据结构。

构造数组


$ jq '[.name, .likes[]]' dog.json [ "Buster", "bones", "balls", "dog biscuits" ]

构造对象


$ jq '{name, "owner_name": .owner.name}' dog.json { "name": "Buster", "owner_name": "Sally" }

七、处理 JSON 中的数据

JSON 包含了对象、数组、数值、字符串、布尔和 null 共 6 种类型数据。因此,jq 也提供了许多用于处理这些数据的 操作符和函数。

假如有一个包含以下 JSON 数据的 inventory.json 文件。


{ "eggs": 2, "cheese": 1, "milk": 1 }

jq 可以对数值类型进行基本的算术运算。


$ jq '.eggs + 1' inventory.json 3

八、移除 JSON 中的数据

jq 使用 del 函数来移除对象或数组中的某些数据项。


$ echo '{"maroilles": "stinky", "goat": "mild"}' | jq 'del(.goat)' { "maroilles": "stinky" }

$ echo '["a", "b", "c", "d", "e"]' | jq 'del(.[2,4])' [ "a", "b", "d" ]

九、过滤数组中的元素

jq 使用 [.[] | select(boolean_expression)] 过滤器组合来保留数组中满足条件的元素,可以简写为 map(select(boolean_expression))


$ jq 'map(select(.id != 1))' names.json [ { "id": 2, "name": "Richard", "age": "32" } ]

$ echo '[1,5,3,0,7]' | jq 'map(select(. >= 2))' [ 5, 3, 7 ]

九、总结

本文通过几个示例列举了 jq 常用的基本操作,足以应付日常的 JSON 数据处理。 jq 其实是一个非常强大的 JSON 数据处理工具,它内置了一个语言系统来描述对数据的处理,支持变量定义、函数定义、条件判断、循环操作、异常处理等语言特性,可以通过 man jq 或者 jq 使用手册 进一步了解。


参考资料

  • JSON on the command line with jq, George Ornbo
  • jq is sed for JSON , Gabe Berke-Williams

最后

以上就是落后航空为你收集整理的命令行 JSON 处理工具 jq 的使用命令行 JSON 处理工具 jq 的使用的全部内容,希望文章能够帮你解决命令行 JSON 处理工具 jq 的使用命令行 JSON 处理工具 jq 的使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部