1. 点符号读取json字段
sh
yum install jq
jq .ziduan1 file.json
jq .ziduan1 *.json
2. 点符号读取json字段--字典套字典
sh
yum install jq
jq .ziduan1.ziduan11 file.json
3. 点符号读取json字段--字典套列表再套字典 读取字典中所有的列表
sh
yum install jq
jq '.ziduan1[].ziduan11' file.json
4. jq -r
jq -r 是 jq 命令的一个常用选项,其中:
-r 代表 --raw-output,作用是:
- 输出原始字符串(去除 JSON 字符串值的双引号)
- 避免 JSON 字符串中的特殊字符被转义
sh
# 不加 -r(默认输出带引号)
echo '{"name":"John"}' | jq '.name'
# 输出: "John"
# 加 -r(直接输出原始值)
echo '{"name":"John"}' | jq -r '.name'
# 输出: John
5. 不输出为空的
只想在 .ziduan1.ziduan11字段不为空(null)时输出
sh
accent=`jq -r '.ziduan1.ziduan11 // empty' $json_path`
// empty 是 jq 的空值处理运算符,表示当左侧值为 null 或 false 时返回空
这样只有当 ziduan1.ziduan11有实际值时才会输出
6. jq select 做条件判断
假设你有一个名为 data.json
的文件,内容如下:
过滤数组:
假设你的 JSON 文件包含一个数组,格式如下:
json
{
"users": [
{ "name": "John", "age": 30 },
{ "name": "Jane", "age": 25 },
{ "name": "Doe", "age": 35 }
]
}
-
获取数组中的所有
name
值:bashjq '.users[].name' data.json
-
获取所有年龄大于 30 的用户:
bashjq '.users[] | select(.age > 30)' data.json
使用管道进行更复杂的操作:
你可以通过管道将多个 jq
操作结合起来,进行更复杂的查询和转换。
例如,从下面的 JSON 文件中提取出所有 name
和 age
字段,并以 JSON 格式输出:
json
{
"users": [
{ "name": "John", "age": 30 },
{ "name": "Jane", "age": 25 },
{ "name": "Doe", "age": 35 }
]
}
bash
jq '.users[] | {name, age}' data.json
输出结果:
json
{
"name": "John",
"age": 30
}
{
"name": "Jane",
"age": 25
}
{
"name": "Doe",
"age": 35
}
格式化输出:
使用 jq
时,默认情况下,它会自动格式化输出为易于阅读的格式。你也可以使用 -c
选项来输出压缩格式的 JSON(去除换行和缩进):
bash
jq -c . data.json