使用jq提取JSON中ip_address遇报错:Cannot index string with string
解决jq提取嵌套JSON字符串中ip_address的问题
错误原因很明确:你的"External gateway info"字段存在两种情况——部分是JSON格式的字符串,部分是null。直接用{external_fixed_ips}访问字符串类型的字段,自然会触发"无法用字符串索引字符串"的错误。
正确的jq命令
jq -r '.[]."External gateway info" | select(. != null) | fromjson | .external_fixed_ips[]?.ip_address'
命令拆解
select(. != null):先过滤掉值为null的记录,避免后续处理出错fromjson:将JSON格式的字符串解析成jq可操作的对象,这是解决问题的核心步骤.external_fixed_ips[]?:[]遍历数组中的每个元素,?用来处理external_fixed_ips为空或不存在的情况,防止报错中断执行.ip_address:最终提取目标字段
补充说明
如果你的external_fixed_ips本身不是数组(比如是单个对象),可以把[]?改成?.,即:
jq -r '.[]."External gateway info" | select(. != null) | fromjson | .external_fixed_ips?.ip_address'
内容的提问来源于stack exchange,提问作者chetzz
相关产品推荐
相关产品推荐

