我有一些 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"
}

Demo