使用jq重命名嵌套JSON键出错,如何将department改为company并保留在properties中?
JSON嵌套键重命名错误分析与解决方法
问题场景
输入JSON结构(补充了根对象包裹,否则jq无法正常解析):
{ "properties": { "name": "Ram", "age": "17", "department": "Sony" } }
使用的jq命令:
jq '[.["properties.company"] = .properties.department| del(.properties.department)]' file
当前错误输出:
[ { "properties": { "name": "Ram", "age": "17" }, "properties.company": "Sony" } ]
期望输出:
{ "properties": { "name": "Ram", "age": "17", "company": "Sony" } }
错误原因
- 键路径写法错误:
.["properties.company"]是在根层级创建一个名为properties.company的新键,而非在properties对象内部添加company键,完全偏离了目标层级。 - 多余的数组包裹:命令外层的
[]会把整个JSON对象包装成数组,直接破坏了原有结构。
正确的jq命令
直接针对properties对象内部进行键的重命名操作:
jq '.properties.company = .properties.department | del(.properties.department)' file
执行结果
运行上述命令后,输出将与期望结果完全一致:department键被删除,properties对象内新增company键并继承原department的值,整体JSON结构保持不变。
内容的提问来源于stack exchange,提问作者Bokambo
相关产品推荐
相关产品推荐

