如何使用JMESPath提取嵌套JSON中hostnames字段的值?
问题:提取嵌套JSON字符串中的hostnames值
原始JSON数据:
[ { "freeform-tags": { "ADB$MIGRATION1": "{\"hostnames\":[\"Test-company1\",\"Test-company2\"],\"port\":1521,}", "databasetype": "QA" } } ]
核心问题
你之前的JMESPath表达式失效的原因有两点:
ADB$MIGRATION1对应的值是JSON格式的字符串,而非直接的JSON对象,常规属性访问语法无法读取其中字段;- 该JSON字符串本身存在语法错误(
"port":1521,末尾多余逗号),即使尝试解析也会失败。
解决方案
步骤1:修正JSON字符串语法
先把ADB$MIGRATION1对应的字符串修正为合法JSON,去掉末尾多余逗号:
"{\"hostnames\":[\"Test-company1\",\"Test-company2\"],\"port\":1521}"
步骤2:使用JMESPath解析并提取字段
用from_json()函数将字符串解析为可访问的对象后,再提取hostnames,正确表达式如下:
[].from_json("freeform-tags"."ADB$MIGRATION1").hostnames
表达式说明
[]:遍历顶层数组中的每个对象;from_json("freeform-tags"."ADB$MIGRATION1"):将目标JSON字符串解析为可访问的JSON对象;.hostnames:访问解析后对象的hostnames属性。
执行后返回结果:
[ ["Test-company1", "Test-company2"] ]
内容的提问来源于stack exchange,提问作者Ritesh Shukla
相关产品推荐
相关产品推荐

