jq技术问询:如何在保留原结构的前提下为分区数组元素添加end属性
正确的jq解决方案:为分区表添加end属性
要在保留原JSON完整结构的前提下,给partitiontable.partitions数组中的每个分区对象添加end属性(值为start与size之和),可以使用|=运算符精准更新目标对象:
.partitiontable.partitions[] |= . + {end: .start + .size}
错误原因分析
- 直接赋值失败:执行
.partitiontable.partitions[].end = .size + .start时,.size和.start的上下文是整个顶层文档,而非当前遍历的分区对象,导致计算结果为null。 - 递归运算符破坏结构:用
..筛选含start的对象时,会返回所有匹配的对象集合,而非原文档的完整结构,因此丢失了外层的disk、partitiontable等层级。
示例验证
输入JSON:
{ "disk": "/dev/sda", "partitiontable": { "partitions": [ {"start": 2048, "size": 1048576, "type": "primary"}, {"start": 1050624, "size": 2097152, "type": "extended"} ] } }
执行命令后输出:
{ "disk": "/dev/sda", "partitiontable": { "partitions": [ {"start": 2048, "size": 1048576, "type": "primary", "end": 1050624}, {"start": 1050624, "size": 2097152, "type": "extended", "end": 3147776} ] } }
内容的提问来源于stack exchange,提问作者Brian Chrisman
相关产品推荐
相关产品推荐

