使用JQ过滤不同层级的JSON数据
Using JQ to filter JSON data at different levels
我有这个 JSON 数据:some-json-file 其中包含以下内容
{
"result": [
{
"id": "1234567812345678",
"name": "somewebsite.com",
"status": "active",
"type": "secondary",
"activated_on": "2021-12-12T15:44:40.444433Z",
"plan": {
"id": "77777777777777777777777777",
"name": "Enterprise Website",
"is_subscribed": true,
"legacy_id": "enterprise",
"externally_managed": true
}
}
],
"result_info": {
"page": 1,
"total_pages": 1
},
"success": true,
"messages": []
}
我正在尝试使用 jq
从中获取过滤后的输出
{
"name": "somewebsite.com",
"type": "secondary",
"plan": {
"name": "Enterprise Website",
"id": "77777777777777777777777777"
}
}
但我不知道该怎么做。
我可以这样过滤第一层标签
cat some-json-file | jq '.result[] | {name,type,plan}'
这让我得到这个输出
{
"name": "somewebsite.com",
"type": "secondary",
"plan": {
"id": "77777777777777777777777777",
"name": "Enterprise Website",
"is_subscribed": true,
"legacy_id": "enterprise",
"externally_managed": true
}
}
这让我很接近,但我无法进一步过滤 .plan 下的子标签,因此我只能看到 .name 和 .id.
有什么想法吗?谢谢!
你快到了。只需设置新上下文并再次使用相同的技术:
jq '.result[] | {name,type,plan: .plan | {name,id}}' some-json-file
{
"name": "somewebsite.com",
"type": "secondary",
"plan": {
"name": "Enterprise Website",
"id": "77777777777777777777777777"
}
}
注意:您不需要cat
输入,jq
接受文件名作为参数。
我有这个 JSON 数据:some-json-file 其中包含以下内容
{
"result": [
{
"id": "1234567812345678",
"name": "somewebsite.com",
"status": "active",
"type": "secondary",
"activated_on": "2021-12-12T15:44:40.444433Z",
"plan": {
"id": "77777777777777777777777777",
"name": "Enterprise Website",
"is_subscribed": true,
"legacy_id": "enterprise",
"externally_managed": true
}
}
],
"result_info": {
"page": 1,
"total_pages": 1
},
"success": true,
"messages": []
}
我正在尝试使用 jq
从中获取过滤后的输出{
"name": "somewebsite.com",
"type": "secondary",
"plan": {
"name": "Enterprise Website",
"id": "77777777777777777777777777"
}
}
但我不知道该怎么做。
我可以这样过滤第一层标签
cat some-json-file | jq '.result[] | {name,type,plan}'
这让我得到这个输出
{
"name": "somewebsite.com",
"type": "secondary",
"plan": {
"id": "77777777777777777777777777",
"name": "Enterprise Website",
"is_subscribed": true,
"legacy_id": "enterprise",
"externally_managed": true
}
}
这让我很接近,但我无法进一步过滤 .plan 下的子标签,因此我只能看到 .name 和 .id.
有什么想法吗?谢谢!
你快到了。只需设置新上下文并再次使用相同的技术:
jq '.result[] | {name,type,plan: .plan | {name,id}}' some-json-file
{
"name": "somewebsite.com",
"type": "secondary",
"plan": {
"name": "Enterprise Website",
"id": "77777777777777777777777777"
}
}
注意:您不需要cat
输入,jq
接受文件名作为参数。