jq中pick_extension无匹配时如何返回null而非空结果
解决方案
问题原因
原有代码的核心问题是pick_extension函数中,select操作无匹配结果时会直接截断输出流,不会产生任何返回值,后续管道连接的所有运算都会终止,最终数组构造语句没有输入元素,就返回了空数组。
修改后的jq代码
def pick_extension($url): # 筛选结果存入数组后取首个元素,无匹配时兜底返回null,保证函数始终有输出 [.extension[] | select(.url == $url)] | first // null; pick_extension("http://hl7.org/fhir/StructureDefinition/patient-nationality") as $ext | [ $ext.url, $ext.extension[0].url, $ext.extension[0].valueCodeableConcept.coding[0].system, $ext.extension[0].valueCodeableConcept.coding[0].code ]
效果说明
- 当存在匹配的扩展字段时,会按顺序返回扩展url、子扩展url、编码体系、编码值四个字段
- 当不存在匹配的扩展字段时,
$ext值为null,jq中从null取值会默认返回null,最终输出固定为[null, null, null, null],完全符合预期要求。
如果使用的jq版本不支持first内置函数,可将first // null替换为.[0] // null,效果完全一致。
内容的提问来源于stack exchange,提问作者Jordi
相关产品推荐
相关产品推荐

