欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > jp(1) command

jp(1) command

2025/4/18 20:37:05 来源:https://blog.csdn.net/K346K346/article/details/146046125  浏览:    关键词:jp(1) command

文章目录

  • 1.简介
  • 2.格式
  • 3.选项
  • 4.示例
  • 5.小结
  • 参考文献

1.简介

jq 是一个轻量级、灵活的命令行 JSON 处理器,类似于文本处理工具 sed、awk、grep 等。

jq 使用用可移植的 C 语言编写的,没有运行时依赖,允许您轻松地切片、过滤、映射和转换结构化数据。

2.格式

jq [options] <filter> [files...]
  • 如果没有指定输入文件,jp 会从标准输入读取数据。
  • 如果 JSON 数据是来自文件,可以将其作为参数传递。

3.选项

-c, --compact-output压缩输出,使其输出为单行格式。
--color-output / -C 或 --monochrome-output / -M默认情况下,如果写入到终端,jq输出彩色JSON。即使写入管道或文件,也可以使用-C强制生成颜色,并使用-M禁用颜色。当 NO_COLOR 环境变量不为空时,jq 默认禁用彩色输出,但您可以通过 -C 启用它。
-f, --from-file filename指定输入的 JSON 文件。
-r, --raw-output输出结果不带引号,这对于让 jq 过滤器与非基于 json 的系统对话非常有用。
-h, --help显示帮助信息。
-V, --version显示版本信息。

4.示例

假设有以下 JSON 数据,保存在 data.json 文件。

{"name": "John","age": 30,"cars": [{"name": "Ford", "models": ["Fiesta", "Focus", "Mustang"]},{"name": "BMW", "models": ["320", "X3", "X5"]},{"name": "Fiat", "models": ["500", "Panda"]}]
}

(1)基本查询。

查询顶级字段:

jq '.name' data.json# 输出
"John"jp '.age' data.json# 输出
30

. 表示当前上下文(根对象)。

.name 表示从根对象获取 name 属性。

(2)嵌套查询。

比如想查询数组中第 0 个对象的 name 属性:

jq '.cars[0].name' data.json# 输出
"Ford"

如果你想查询数组中所有对象的 name 属性,并以一个数组形式输出,可以使用 jq 的 map 函数来处理。map 会应用一个过滤器到数组的每个元素,并返回一个包含所有结果的数组。

jq '.cars | map(.name)' data.json# 输出
["Ford","BMW","Fiat"
]

(3)修改字段。

假设我们想修改某个字段的值。比如将年龄改为 26。

jq '.age = 26' data.json

我们也可以对数组中的每个元素进行修改。

假设你想将所有汽车的 model 名称转换为大写,可以使用 map 和 jq 内置的字符串操作函数 :

jq '.cars | map(.models |= map(ascii_upcase))' data.json# 输出
[{"name": "Ford","models": ["FIESTA","FOCUS","MUSTANG"]},{"name": "BMW","models": ["320","X3","X5"]},{"name": "Fiat","models": ["500","PANDA"]}
]

其中 |= 用于修改对象的字段值。

(4)过滤数组元素。

我们可以提取 name 为 BMW 的汽车:

jq '.cars | map(select(.name == "BMW"))' data.json# 输出
[{"name": "BMW","models": ["320","X3","X5"]}
]

如果只想提取第一个符合条件的对象,可以使用:

jq '.cars | map(select(.name == "BMW")) | .[0]' data.json# 输出
{"name": "BMW","models": ["320", "X3", "X5"]
}

(5)格式化输出并启用颜色高亮显示。

jq -C . data.json

注意 jq 打印 JSON 文件时,必须提供一个过滤器,其中 . 表示整个输入。

(6)压缩成单行格式输出。

jq 的 -c 选项用于将输出压缩成单行格式,去掉多余的空格和换行符。这个选项通常用于在输出 JSON 时,去除格式化和缩进,使输出更紧凑,便于进一步处理或存储。

jq -c '.cars' data.json# 输出[{"name":"Ford","models":["Fiesta","Focus","Mustang"]},{"name":"BMW","models":["320","X3","X5"]},{"name":"Fiat","models":["500","Panda"]}]

(7)输出不带引号。

jq -r '.name' data.json# 输出
John

假设你想输出所有汽车的 models 数组中所有的模型名称,并且去掉引号,可以使用:

jq -r '.cars[].models[]' data.json# 输出
"Fiesta"
"Focus"
"Mustang"
"320"
"X3"
"X5"
"500"
"Panda"

5.小结

jq 的最早版本是在 2010 年由 Stephen Dolan 开发的。Dolan 是一位软件工程师,致力于开发实用的命令行工具。他的目标是创建一个能够高效处理 JSON 数据的工具,类似于 sed、awk 和 grep 这类 Unix 工具,但专门针对 JSON 格式。

jq 从一个个人开发的小工具开始,逐步发展成了广受欢迎、强大的 JSON 处理工具。它的灵活性、扩展性以及高效性使其成为开发者、运维人员、数据科学家等不同领域的必备工具之一。

jq 拥有丰富的指南和手册,可以在其官网寻找到你所需的帮助。


参考文献

jq github
Official Documentation: jqlang.org
Try jq Online: play.jqlang.org

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词