[linux命令] jq - JSON处理

jq是一款用C语言编写的轻量级且灵活的命令行JSON处理器。它支持数据分片、过滤、映射和转换,能够像sed、awk、grep等工具一样处理文本。本文介绍如何在mac环境下安装jq,并通过实例演示jq的各种使用技巧,包括过滤、类型和值的处理、内建函数等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jq可以对json数据进行分片、过滤、映射、转换,jq可以像sed、awk、grep等命令一样轻松的处理文本;jq使用c语言编写,没有运行时依赖,可以下载预编译的二进制文件复制到远程机器上运行;使用jq可轻松的将现有的数据格式转换为你想要的数据格式。

一、用户手册
  • mac下安装
brew install jq
二、使用示例

jq使用方法

jq [options] <jq filter> [file...]

其中,options为jq执行的参数,filter为过滤的符号,file为被执行对象(可同时执行多个对象),当不指定文件时,以命令行用户输入作为jq输入。

  • 2.1 jq执行参数(options)
参数功能范例
-c将输出按压缩格式展示(默认情况下按JSON格式化展示)jq -c . test.txt
-C将输出按带颜色的JSON格式化展示或到管道jq -C . test.txt
-M禁止输出按带颜色的JSON格式化展示或到管道jq -M . test.txt
-S按JSON字段的顺序输出jq -S . test.txt

全部参数见用户操作手册

  • 2.2 jq过滤功能

“.” : 输出自己,搭配"[]“可处理数组元素,”[n1:n2]"指定输出数组的范围,也可根据JSON多层结果做级联处理。

MacBook-Pro-6:test jerry$ jq -c . test.txt
[{"name":"JSON","good":true},{"name":"XML","good":false}]
MacBook-Pro-6:test jerry$ jq .[] test.txt
{
  "name": "JSON",
  "good": true
}
{
  "name": "XML",
  "good": false
}
MacBook-Pro-6:test jerry$ jq .[1:2] test.txt
[
  {
    "name": "XML",
    "good": false
  }
]
MacBook-Pro-6:test jerry$ jq .[1] test.txt
{
  "name": "XML",
  "good": false
}
MacBook-Pro-6:test jerry$ jq .[1].name test.txt
"XML"
MacBook-Pro-6:test jerry$

“,” : 可对输入执行多个过滤条件并输出结果

MacBook-Pro-6:test jerry$ jq -c . test2.txt
{"user":"stedolan","projects":["jq","wikiflow"]}
MacBook-Pro-6:test jerry$ jq '.user, .projects[1]' test2.txt
"stedolan"
"wikiflow"

“|” : 管道可像Unix管道一样,将管道左侧的输出作为管道右侧的输入,当管道左侧有多个输出时,会按顺序依次执行管道右侧的命令

MacBook-Pro-6:test jerry$ jq -c '.' test.txt
[{"name":"JSON","good":true},{"name":"XML","good":false}]
MacBook-Pro-6:test jerry$ jq '.[] | .name' test.txt
"JSON"
"XML"

“()” : 组合操作符

MacBook-Pro-6:test jerry$ jq '(. + 3) * 2'
1
8
  • 2.3 类型和值

“[]” : 构建数组

MacBook-Pro-6:test jerry$ jq -c '.' test2.txt
{"user":"stedolan","projects":["jq","wikiflow"]}
MacBook-Pro-6:test jerry$ jq '[.user, .projects[1]]' test2.txt
[
  "stedolan",
  "wikiflow"
]

“{}” : 构建对象

MacBook-Pro-6:test jerry$ jq -c '.' test2.txt
{"user":"stedolan","projects":["jq","wikiflow"]}
MacBook-Pro-6:test jerry$ jq '{A : .user, B : .projects[]}' test2.txt
{
  "A": "stedolan",
  "B": "jq"
}
{
  "A": "stedolan",
  "B": "wikiflow"
}
  • 2.4 内建函数

“keys” : 应用于对象时,返回对象中的key组合,按字母顺序排列;应用于数组时,返回数组中对象的下标。

MacBook-Pro-6:test jerry$ jq -c '.' test.txt
[{"name":"JSON","good":true},{"name":"XML","good":false}]
MacBook-Pro-6:test jerry$ jq 'keys' test.txt
[
  0,
  1
]
MacBook-Pro-6:test jerry$ jq '.[1] | keys' test.txt
[
  "good",
  "name"
]

“has(key)” : 应用于对象时,返回对象是否有指定key;应用于数组时,返回是否有指定下标。

MacBook-Pro-6:test jerry$ jq -c '.' test.txt
[{"name":"JSON","good":true},{"name":"XML","good":false}]
MacBook-Pro-6:test jerry$ jq '.[1] | has("name")' test.txt
true
MacBook-Pro-6:test jerry$ jq 'has(12)' test.txt
false

“del(path_expression)” : 删除对象的指定key或数组的指定下标对象(不会对源文件进行删除)

MacBook-Pro-6:test jerry$ jq -c '.' test.txt
[{"name":"JSON","good":true},{"name":"XML","good":false}]
MacBook-Pro-6:test jerry$ jq 'del(.[].name)' test.txt
[
  {
    "good": true
  },
  {
    "good": false
  }
]
MacBook-Pro-6:test jerry$ jq 'del(.[1])' test.txt
[
  {
    "name": "JSON",
    "good": true
  }
]

更多内建函数见用户手册

  • 2.5 条件和比较

  • 2.6 正则表达式

<think>好的,用户想了解lshw-json命令的输出内容。首先,我需要回忆一下lshw的基本用法和相关选项。根据之前的引用资料,用户已经知道lshw是用来查看硬件信息的工具,支持不同的输出格式,比如HTML、short、businfo等,而-json选项应该是以JSON格式输出硬件信息。接下来,我需要确认lshw的JSON输出结构。可能需要查阅官方文档或实际运行命令来查看示例输出。不过根据引用内容,用户提到过其他选项如-classprocessor,所以JSON结构可能包含层级化的硬件信息,比如每个设备的类别、ID、描述、子设备等。然后,用户需要详细的格式解析,可能需要分部分解释JSON中的各个字段。例如,每个硬件节点可能包含id、class、description、product、vendor、physid、size等属性。此外,子设备可能以children数组的形式嵌套在父设备下。 还需要考虑用户可能的实际需求,比如如何处理JSON输出,如何解析其中的敏感信息(结合-sanitize选项),或者如何与其他工具结合使用。同时,用户可能希望了解如何验证这些信息的准确性,比如与/proc文件系统或其他命令(如lscpu、lsblk)对比。另外,根据引用中的安装和使用步骤,用户可能是在不同的系统上使用lshw,比如基于Debian或RedHat的Linux发行版,需要注意命令的可执行权限(可能需要sudo)。同时,引用提到过在JSON输出中可能包含敏感信息,所以需要提醒用户使用-sanitize参数来过滤这些内容。 最后,生成相关问题时要围绕JSON输出的应用场景、解析方法、与其他格式的对比、常见字段用途以及错误处理等方面展开,帮助用户进一步探索。</think>### lshw -json 命令输出格式详解 `lshw -json` 命令会以 **JSON 格式**输出系统的完整硬件信息,其数据结构为**树状层级结构**,包含设备属性、子设备关系及技术参数。以下为关键字段解析: --- #### 1. **根节点属性** - **`id`**: 设备唯一标识符(如`core`表示主板核心组件)。 - **`class`**: 硬件分类(如`processor`表示CPU,`memory`表示内存)。 - **`description`**: 设备类型描述(如`Computer`表示整机)。 - **`product`**: 设备型号名称(如`MacBook Pro`)。 - **`vendor`**: 制造商(如`Apple Inc.`)。 - **`children`**: 子设备列表,包含下级硬件组件[^3]。 --- #### 2. **常见设备字段** - **CPU (`class: processor`)** - `capacity`: 处理器频率(如`2300MHz`)。 - `cores`: 核心数量。 - `version`: 具体型号(如`Intel Core i7-9750H`)。 - **内存 (`class: memory`)** - `size`: 容量(如`16GB`)。 - `clock`: 时钟频率(如`2400MHz`)。 - **硬盘 (`class: disk`)** - `serial`: 序列号(使用`-sanitize`会替换为`REMOVED`)。 - `logical name`: 设备路径(如`/dev/sda`)[^2]。 --- #### 3. **嵌套结构示例** ```json { "id": "system", "class": "system", "children": [ { "id": "cpu:0", "class": "processor", "product": "Intel Core i7-9750H", "vendor": "Intel Corp.", "children": [ {"id": "cache:0", "class": "memory", "size": "256KiB"} ] } ] } ``` 此结构表示**CPU包含缓存子设备**[^4]。 --- #### 4. **特殊处理** - **敏感信息过滤**:添加`-sanitize`参数可隐藏序列号、MAC地址等(显示为`REMOVED`)[^3]。 - **指定设备类别**:如`lshw -json -class network`仅输出网络设备信息。 --- #### 5. **应用场景** - **自动化脚本**:JSON格式便于用`jq`等工具解析,例如提取所有磁盘名称: ```bash lshw -json | jq '.children[] | select(.class == "disk") .logicalname' ``` - **数据对比**:结合`diff`命令比较不同机器的硬件配置差异。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值