json - JQ 根据 Child 选择外部对象和 Child
问题描述
仅当密钥 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_guid
如下service_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 是如何工作的。
解决方案
这是获得预期输出的多种方法之一:
jq '.resources[].entity | select(.credentials."credhub-ref") | {app_guid, service_instance_guid, credentials}' test.json
它将.credentials.credhub-ref
在每个对象中搜索,如果找到entity
,将作为对象返回。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"
}
}
推荐阅读
- database - 我所有的 Wordpress AJAX 请求都为订阅者返回 html 页面。为什么?
- python - 当我重新回答“while”循环时出现类型错误
- spring-kafka - 使用模式注册表时如何创建/模拟反序列化异常的创建(除了代理和动物园管理员)
- java - 检查/测试 RedirectView 是否会重定向到特定的 url
- azure - 如何创建用户用户定义函数在 kusto 中进行字符串连接
- for-loop - 在 Jekyll for 循环中访问嵌套数据
- django - 在上下文中使用大型生成器流式传输 Django 模板
- google-cloud-platform - 在没有任何组织级别权限的情况下获取 GCP 中给定项目的资产/资源列表
- azure-devops - 用于成功测试的 Azure Devops Pipelines 测试附件
- android - 如何在 Unity 混合应用程序中从 VR 模式转到 2D 模式?