使用JQ报错Cannot index array with string 'taskDefinitionArn'求助
问题排查与解决
报错原因
jq: error (at :139): Cannot index array with string "taskDefinitionArn" 这个错误的核心原因是:你的JQ命令默认map遍历的所有元素都是JSON对象,但当前输入的JSON数组中存在至少一个元素是数组类型。当JQ尝试对数组元素执行.taskDefinitionArn(用字符串键名索引)时,自然会触发索引不匹配的错误。
直白点说:之前的输入是纯对象数组,现在输入数组里混进了数组元素,导致del操作无法在数组上执行键名索引。
解决方案
根据你的需求,提供两种可行处理方式:
方式1:仅处理对象元素,保留其他类型元素
如果需要保留输入中的非对象元素(比如数组),只对对象元素执行删除操作,修改后的命令如下:
map(if type == "object" then del(.taskDefinitionArn, .revision, .status, .requiresAttributes, .compatibilities) else . end)
方式2:过滤非对象元素,仅保留处理后的对象
如果不需要保留非对象元素,可以先过滤出对象类型的元素再执行删除:
map(select(type == "object") | del(.taskDefinitionArn, .revision, .status, .requiresAttributes, .compatibilities))
额外建议
如果原本输入应该是纯对象数组,建议检查输入JSON的第139行附近(报错提示的位置),确认是否存在意外的数组元素,排查数据来源的结构变化问题。
内容的提问来源于stack exchange,提问作者VENKI
相关产品推荐
相关产品推荐

