当前位置: 首页 > news >正文

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

http://www.dtcms.com/a/112736.html

相关文章:

  • FreeRTOS任务创建和删除(动态)
  • 如何在 Windows 10 上安装 PyGame
  • 将电脑控制手机编写为MCP server
  • UE5学习笔记 FPS游戏制作39 制作一个带有背景的预制面板 使用overlay和nameSlot
  • 解决上传PDF、视频、音频等格式文件到FTP站点时报错“将文件复制到FTP服务器时发生错误。请检查是否有权限将文件放到该服务器上”问题
  • Vue 3 的响应式原理
  • Qt UI框架和Duilib UI框架差别
  • 文档的预解析
  • JavaWeb 课堂笔记 —— 02 JavaScript
  • 机器视觉开发工程师常用C#运算符与使用方法大总结
  • 网络安全防御核心原则与实践指南
  • php7.4.3连接MSsql server方法
  • 方差分析_单因素、多因素、析因方差分析
  • 【首款ARMv9开源芯片“星睿“O6测评】在“周易”NPU上部署Yolov8l模型并实现实时目标检测
  • 场馆预定系统小程序PHP+uniapp
  • 讲述我的PLC自学之路 第六章
  • Harmony OS“一多” 详解:基于窗口变化的断点自适应实现
  • 类的基本概念
  • 深入剖析丝杆升降机工作原理,解锁工业传动奥秘
  • 【C++】C++11<包装器没写>
  • 动态规划1——斐波那契数列模型——第 N 个泰波那契数
  • 算法题(117):字符串的展开
  • 16.2Linux自带的LED灯驱动实验(详细编写)_csdn
  • OJ系统C端UI自动化测试
  • Kubernetes 集群搭建(一):从环境准备到 Calico 网络插件部署
  • 自定义填充 cad
  • SpringCloudGateWay
  • spring security 过滤器链相关初始化过程
  • 使用 Elastic 实现端到端的大语言模型(LLM)可观测性:洞察生成式 AI 应用这个不透明的世界
  • C/C++测试框架googletest使用示例