### 1. 简单查询提取特定值
假设我们有一个如下的JSON文件:
json
{
"name": "John",
"age": 30,
"city": "New York"
}
如果我们想要仅获取用户的名字,则可以运行如下 jq 命令:
bash
cat file.json | jq '.name'
# 输出结果:
"John"
这里`.name`是一个路径表达式,用来指定我们需要检索的具体字段名。
### 2. 复杂结构中筛选并变换数据
考虑一个更复杂的情况:
json
[
{
"id": 1,
"title": "Post One",
"author": {"firstName": "Alice", "lastName": "Smith"},
"tags": ["news","tech"]
},
{
"id": 2,
"title": "Post Two",
"author": {"firstName": "Bob", "lastName": "Johnson"},
"tags": ["sports","entertainment"]
}
]
如果我们要从这个数组里抽取所有作者全名,并转化为新的格式(例如:"Author Name: Alice Smith") ,则可采用下面的方式:
bash
cat complex_data.json | jq -r 'map({fullName : .author.firstName + " " + .author.lastName})[]'
# 输出结果:
{"fullName":"Alice Smith"}
{"fullName":"Bob Johnson"}
上述例子展示了 `-r` 参数来输出未经引号转义的结果以及 map 函数的应用,它可以对输入流中的每一个元素应用给定函数进行迭代计算。
### 3 修改现有属性值或添加新键值
若需更改“Post One”的 title为 “Article One”,同时为其增加一个新的 key-value 对:“category”: "General News":
bash
<input='[...]' jq '
(.[]|select(.title == "Post One")).title = "Article One";
(.[]|select(.title == "Post One")) += { category: "General News" }' > output.json
在这段代码中,首先用 select() 方法定位到需要更新的对象;然后赋值语句 `.title="Article One"` 更改了原有属性值; 最后 "+= {...}" 结构允许我们在原对象基础上新增键值对。
总结来说,无论是简单的取值还是深度遍历、重组及编辑Json内容,《jq》以其灵活高效的功能特性提供了强大的支持。熟练掌握其语法及运用场景能极大地提高我们的工作效率,尤其是在大规模自动化脚本编写或是API响应分析等任务上表现尤为突出。