这里是我的文档:
[
{
"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"
}
]
我一直在玩map
和select
,但我不太清楚什么是正确的方法
有什么想法吗?
这种方法使用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来说还是个新手,所以欢迎任何反馈。