我有一些 JSON 但我想使用 jq 基于变量提取数据
I have some JSON but I want to extract data based on a variable using jq
我有一些 JSON 数据,我想使用 jq
解析
{{
"metadata":{
"name":"run1",
"uid":"b2c0ce",
"creationTimestamp":"2021-01-01T01:01:01Z"
},
"spec":{
"arguments":{}
},
"status":{
"phase":"Failed",
"startedAt":"2021-01-01T01:01:01Z",
"finishedAt":"2021-01-01T01:01:01Z"
}
},
{
"metadata":{
"name":"run2",
"uid":"9b0af3",
"creationTimestamp":"2021-01-01T01:01:01Z"
},
"spec":{
"arguments":{}
},
"status":{
"phase":"Succeeded",
"startedAt":"2021-01-01T01:01:01Z",
"finishedAt":"2021-01-01T01:01:01Z"}}}
我有一个用户将输入“名称”的脚本,我希望能够查找并提取他们输入的名称的元数据(如果存在)。因此,例如,如果他们输入“run7”,我希望最终输出为:
{"metadata":{
"name":"run7",
"uid":"b2c0ce",
"creationTimestamp":"2021-01-01T01:01:01Z"}
或者如果可能只显示
"name":"run7",
"uid":"b2c0ce",
"creationTimestamp":"2021-01-01T01:01:01Z"
我得到的最接近的是:
jq -r '.[] | .[] | map({name: .name, uid: .uid, time: .creationTimestamp })' file.json
但我不确定我现在如何才能只搜索某个名称。我这样做的方式是这样的:
{
"name": "run10",
"uid": "af7b51f",
"time": "2021-01-01T01:01:01Z"
},
{
"name": null,
"uid": null,
"time": null
},
{
"name": null,
"uid": null,
"time": null
}
我也不希望它检查“规范”或“状态”,因为那是 null 的来源
假设这些输入对象在一个数组中,
.[] | select(.metadata.name == "run2") | .metadata
请问select对象所在.metadata.name === run2
.
然后显示该对象的 .metadata
,因此输出变为:
{
"name": "run2",
"uid": "9b0af3",
"creationTimestamp": "2021-01-01T01:01:01Z"
}
我有一些 JSON 数据,我想使用 jq
解析{{
"metadata":{
"name":"run1",
"uid":"b2c0ce",
"creationTimestamp":"2021-01-01T01:01:01Z"
},
"spec":{
"arguments":{}
},
"status":{
"phase":"Failed",
"startedAt":"2021-01-01T01:01:01Z",
"finishedAt":"2021-01-01T01:01:01Z"
}
},
{
"metadata":{
"name":"run2",
"uid":"9b0af3",
"creationTimestamp":"2021-01-01T01:01:01Z"
},
"spec":{
"arguments":{}
},
"status":{
"phase":"Succeeded",
"startedAt":"2021-01-01T01:01:01Z",
"finishedAt":"2021-01-01T01:01:01Z"}}}
我有一个用户将输入“名称”的脚本,我希望能够查找并提取他们输入的名称的元数据(如果存在)。因此,例如,如果他们输入“run7”,我希望最终输出为:
{"metadata":{
"name":"run7",
"uid":"b2c0ce",
"creationTimestamp":"2021-01-01T01:01:01Z"}
或者如果可能只显示
"name":"run7",
"uid":"b2c0ce",
"creationTimestamp":"2021-01-01T01:01:01Z"
我得到的最接近的是:
jq -r '.[] | .[] | map({name: .name, uid: .uid, time: .creationTimestamp })' file.json
但我不确定我现在如何才能只搜索某个名称。我这样做的方式是这样的:
{
"name": "run10",
"uid": "af7b51f",
"time": "2021-01-01T01:01:01Z"
},
{
"name": null,
"uid": null,
"time": null
},
{
"name": null,
"uid": null,
"time": null
}
我也不希望它检查“规范”或“状态”,因为那是 null 的来源
假设这些输入对象在一个数组中,
.[] | select(.metadata.name == "run2") | .metadata
请问select对象所在.metadata.name === run2
.
然后显示该对象的 .metadata
,因此输出变为:
{
"name": "run2",
"uid": "9b0af3",
"creationTimestamp": "2021-01-01T01:01:01Z"
}