使用jq转换JSON数组时出现Cannot index number报错如何解决
错误原因
你遇到的报错是jq运算符优先级导致的:
- jq中管道符
|的优先级高于赋值运算符=,你写的原始命令会被解析为(.fields_selected = .fields_selected) | map(...) - 这等于先对fields_selected做了无意义的赋值,紧接着把整个JSON对象(是对象结构,不是数组)传给
map函数处理 map遍历对象时会逐个处理对象的属性值,当遍历到数值类型的default_interval(值为90000)时,尝试取.measurement属性就触发了「无法用字符串"measurement"索引数字」的报错。
修正后的jq命令
只需要给赋值右侧的逻辑加括号,明确管道的作用范围即可:
jq '.fields_selected = (.fields_selected | map({name: .measurement, aggregation: {step: .step, function: .aggregation}}))' config-it-client.json
执行后会保留db_credentials、default_interval等原有字段,同时按要求重构fields_selected数组内的结构,完全匹配你需要的输出格式。
内容的提问来源于stack exchange,提问作者hamza sadiqi
相关产品推荐
相关产品推荐

