jq提取嵌套数组对象内字符串时重写过滤器报错如何解决
jq过滤器报错原因与修正方案
原始运行情况
原始过滤器
( ._birthDate.extension[0] | .url, ( .extension[0] | .url, .valueString ), ( .extension[1] | .url, .valueString ) )
输入JSON
{ "_birthDate":{ "extension":[ { "url":"http://catsalut.gencat.cat/fhir/StructureDefinition/patient-dataBirhtDeath", "extension":[ { "url":"country", "valueString":"724" }, { "url":"state", "valueString":"08" } ] } ] } }
预期输出
"http://catsalut.gencat.cat/fhir/StructureDefinition/patient-dataBirhtDeath" "country" "724" "state" "08"
报错原因分析
你尝试简化的过滤器( ._birthDate.extension[0] | .url, ( .extension[:2] | .url, .valueString ) )中,.extension[:2]返回的是包含前2个extension元素的数组对象,而非单个JSON对象。jq不支持直接对数组使用字符串键url做索引,因此抛出Cannot index array with string "url"错误。
正确简化后的过滤器
只需要在.extension[:2]后添加[]将数组展开为逐个元素,再取对应属性即可:
._birthDate.extension[0] | .url, ( .extension[:2][] | .url, .valueString )
运行该过滤器即可得到和原始过滤器完全一致的预期输出。
内容的提问来源于stack exchange,提问作者Jordi
相关产品推荐
相关产品推荐

