使用jq命令修改JSON文件值时报Cannot index string with string "Tags"错误求解
报错原因
- 错误使用了
map()函数:map()是专门用于遍历数组的函数,但你的JSON根节点是单个对象而非数组。对根对象调用map()时,jq会提取对象的所有值组成数组进行遍历,其中部分值为字符串类型(比如DBSnapshotIdentifier字段的值就是字符串),遍历到这些字符串时尝试读取.Tags属性,就会触发Cannot index string with string "Tags"的报错。 - 硬编码了
Tags[11]索引:从你提供的JSON来看,Tags数组总共只有4个元素,最大索引为3,Period对应的索引是3,硬编码索引不仅会出现越界问题,后续如果Tags数组的元素顺序发生变动,逻辑会直接失效。
正确命令
仅输出修改后的内容,不修改原文件
jq '(.Tags[] | select(.Key == "Period") .Value) |= "Weekly"' create_snapshot.json
直接修改原文件(jq 1.5及以上版本支持)
jq -i '(.Tags[] | select(.Key == "Period") .Value) |= "Weekly"' create_snapshot.json
命令逻辑说明
.Tags[]遍历Tags数组的所有元素select(.Key == "Period")筛选出Key为Period的元素|= "Weekly"是更新赋值操作,将筛选出的元素的Value字段修改为Weekly,不会改动JSON的其他结构
内容的提问来源于stack exchange,提问作者Muthuselvan Ilangovan
相关产品推荐
相关产品推荐

