jq:过滤数组并投影其他字段



这里是我的文档:

[
{
"id": "9f0e27fe-3b8f-4857-8e1d-e57e7a3f4c31",
"identifier": [
{
"system": {
"value": "urn:oid:1.3.6.1.4.1.19126.3"
},
"value": {
"value": "Y3454867M"
}
},
{
"system": {
"value": "urn:oid:2.16.724.4.9.10.2"
},
"value": {
"value": "108505134"
}
}
]
}
]

我只需要选择.identifier[where .system.value == "urn:oid:1.3.6.1.4.1.19126.3"]和项目.identifier.value.value

期望输出:

[
{
"id": "9f0e27fe-3b8f-4857-8e1d-e57e7a3f4c31",
"identifier": "Y3454867M"
}
]

我一直在玩mapselect,但我不太清楚什么是正确的方法

有什么想法吗?

这种方法使用first来获得第一个结果,以防有多个数组项符合条件。

jq --arg v "urn:oid:1.3.6.1.4.1.19126.3" '
map(.identifier |= first(.[] | select(.system.value == $v).value.value))
'
[
{
"id": "9f0e27fe-3b8f-4857-8e1d-e57e7a3f4c31",
"identifier": "Y3454867M"
}
]

演示

使用好的ol'select工具,因为您需要来自任意索引的数据。在打开管道连接到我选择的内部数组之前,我有点摸索。

jq -r '.[] | [{id: .id, identifier: .identifier | .[] | select(.system.value | contains("urn:oid:1.3.6.1.4.1.19126.3")) | .value.value }]'

对jq来说还是个新手,所以欢迎任何反馈。

相关内容

  • 没有找到相关文章

最新更新