jq - 报告每个(可选)子元素
问题描述
想解析以下内容:
{
"issues": [
{ "id": "1", "fields": { "links": [] } },
{ "id": "2", "fields": { "links": [ { "inlink": { "id": "red" } } ] } },
{ "id": "3", "fields": { "links": [ { "outlink": { "id": "yellow" } } ] } },
{ "id": "4", "fields": { "links": [ { "inlink": { "id": "green" } }, { "outlink": { "id": "blue" } } ] } }
]
}
成表示元素的links
元素,一对一,像这样(注意id 1
缺少并id 4
出现两次:
{ "id": "2", "link": { "linktype": "inlink", "id": "red" } },
{ "id": "3", "link": { "linktype": "outlink", "id": "yellow" } },
{ "id": "4", "link": { "linktype": "inlink", "id": "green" } },
{ "id": "4", "link": { "linktype": "outlink", "id": "blue" } }
以下jq
适用于inlink
或outlink
单独适用
.issues[] | .id as $id | .fields.links[] | .inlink.id as $lid | {$id,$lid}
给予
{ "id": "2", "lid": "red" }
{ "id": "3", "lid": null }
{ "id": "4", "lid": "green" }
{ "id": "4", "lid": null }
但无法弄清楚如何同时跟踪两种类型或引入 key linktype
。有任何想法吗?
解决方案
jq
解决方案:
jq -c '.issues[] | .id as $id
| .fields.links[] | to_entries[]
| {"id": $id, "link": {"linktype": .key, "id": .value.id}}' file
输出:
{"id":"2","link":{"linktype":"inlink","id":"red"}}
{"id":"3","link":{"linktype":"outlink","id":"yellow"}}
{"id":"4","link":{"linktype":"inlink","id":"green"}}
{"id":"4","link":{"linktype":"outlink","id":"blue"}}
推荐阅读
- r - R:使用共享键和缺失数据传播 data.frame/tibble
- .net - 如何将 C# XML 文档格式化为 PDF 或静态 HTML?
- azure - 应用程序网关 ERR_CONNECTION_TIMED_OUT
- highcharts - 高图表值未出现在最后一个柱上
- spring - 如何仅将 JSON 请求正文的几个字段从 DTO 发布到 URL 春季启动
- angularjs - AngularJS翻译:构造动态字符串
- php - 致命错误:未捕获错误:找不到类“CI_DB_mysql_driver”
- amazon-web-services - Terraform 12 如何将for_each数据源转换成list和map
- javascript - javascript 从 forEach 循环返回 true 或 false
- scala - 在 Scala 中重新推断序列类型