【问题标题】:JQ Select Outer Objects and Child Based on ChildJQ 根据 Child 选择外部对象和 Child
【发布时间】:2019-08-16 07:48:27
【问题描述】:

仅当密钥 credhub-ref 存在于 JSON 之后的凭证对象中时,我才尝试选择凭证对象和特定父级对象:

{
   "total_results": 23,
   "total_pages": 1,
   "prev_url": null,
   "next_url": null,
   "resources": [
      {
         "metadata": {
            "guid": "cd",
            "url": "/v2/service_bindings/cd",
            "created_at": "2019-03-04T21:18:53Z",
            "updated_at": "2019-03-04T21:18:53Z"
         },
         "entity": {
            "app_guid": "9c",
            "service_instance_guid": "66",
            "credentials": {
               "credhub-ref": "/c/54"
            },
            "binding_options": {},
            "gateway_data": null,
            "gateway_name": "",
            "syslog_drain_url": null,
            "volume_mounts": [],
            "name": null,
            "last_operation": {
               "type": "create",
               "state": "succeeded",
               "description": "",
               "updated_at": "2019-03-04T21:18:53Z",
               "created_at": "2019-03-04T21:18:53Z"
            },
            "app_url": "/v2/apps/9c",
            "service_instance_url": "/v2/service_instances/66",
            "service_binding_parameters_url": "/v2/service_bindings/cd"
         }
      },
      {
         "metadata": {
            "guid": "cd",
            "url": "/v2/service_bindings/cd",
            "created_at": "2019-03-11T08:49:22Z",
            "updated_at": "2019-03-11T08:49:22Z"
         },
         "entity": {
            "app_guid": "ea",
            "service_instance_guid": "86",
            "credentials": {},
            "binding_options": {},
            "gateway_data": null,
            "gateway_name": "",
            "syslog_drain_url": null,
            "volume_mounts": [],
            "name": null,
            "last_operation": {
               "type": "create",
               "state": "succeeded",
               "description": "",
               "updated_at": "2019-03-11T08:49:22Z",
               "created_at": "2019-03-11T08:49:22Z"
            },
            "app_url": "/v2/apps/ea",
            "service_instance_url": "/v2/service_instances/86",
            "service_binding_parameters_url": "/v2/service_bindings/cd"
         }
      },
      {
         "metadata": {
            "guid": "e0",
            "url": "/v2/service_bindings/e0",
            "created_at": "2019-03-19T20:07:25Z",
            "updated_at": "2019-03-19T20:07:25Z"
         },
         "entity": {
            "app_guid": "73",
            "service_instance_guid": "52",
            "credentials": {
               "hostname": "10.13.7.64",
               "port": 3306,
               "name": "cf_52",
               "username": "w",
               "password": "w",
               "uri": "mysql://",
               "jdbcUrl": "jdbc:mysql://10.193.78.64:"
            },
            "binding_options": {},
            "gateway_data": null,
            "gateway_name": "",
            "syslog_drain_url": null,
            "volume_mounts": [],
            "name": null,
            "last_operation": {
               "type": "create",
               "state": "succeeded",
               "description": "",
               "updated_at": "2019-03-19T20:07:25Z",
               "created_at": "2019-03-19T20:07:25Z"
            },
            "app_url": "/v2/apps/73",
            "service_instance_url": "/v2/service_instances/52",
            "service_binding_parameters_url": "/v2/service_bindings/e0"
         }
      },
      {
         "metadata": {
            "guid": "18",
            "url": "/v2/service_bindings/18",
            "created_at": "2019-03-19T20:07:27Z",
            "updated_at": "2019-03-19T20:07:27Z"
         },
         "entity": {
            "app_guid": "73",
            "service_instance_guid": "ae",
            "credentials": {
               "credhub-ref": "/c/54"
            },
            "binding_options": {},
            "gateway_data": null,
            "gateway_name": "",
            "syslog_drain_url": null,
            "volume_mounts": [],
            "name": null,
            "last_operation": {
               "type": "create",
               "state": "succeeded",
               "description": "",
               "updated_at": "2019-03-19T20:07:27Z",
               "created_at": "2019-03-19T20:07:27Z"
            },
            "app_url": "/v2/apps/73",
            "service_instance_url": "/v2/service_instances/aec",
            "service_binding_parameters_url": "/v2/service_bindings/18"
         }
      }
   ]
}

当前查询只返回凭证对象:

jq '.resources[].entity.credentials | select(.["credhub-ref"])' test.json

结果:

{
  "credhub-ref": "/c/42"
}
{
  "credhub-ref": "/c/54"
}

我需要一个查询来输出父对象app_guidservice_instance_guid,如下所示:

}
   "app_guid": "9c",
   "service_instance_guid": "66",
   "credentials": {
      "credhub-ref": "/c/54"
},
{
   "app_guid": "73",
   "service_instance_guid": "ae",
   "credentials": {
      "credhub-ref": "/c/54"
}

几个很好的例子可以帮助我更好地理解 JQ 的工作原理。

【问题讨论】:

    标签: json object filter parent-child jq


    【解决方案1】:

    这是获得预期输出的多种方法之一:

    jq '.resources[].entity | select(.credentials."credhub-ref") | {app_guid, service_instance_guid, credentials}' test.json
    

    它将在每个entity 对象中搜索.credentials.credhub-ref,如果找到则将app_guid, service_instance_guid, credentials 作为对象返回。

    输出:

    {
      "app_guid": "9c",
      "service_instance_guid": "66",
      "credentials": {
        "credhub-ref": "/c/54"
      }
    }
    {
      "app_guid": "73",
      "service_instance_guid": "ae",
      "credentials": {
        "credhub-ref": "/c/54"
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      • 2012-08-30
      • 1970-01-01
      • 2011-09-03
      相关资源
      最近更新 更多