如何使用jq重构字段名存储于数组的松散结构API返回JSON
问题根源
- 字段缺失问题:原有代码通过
index($item)根据值反向查索引,当data数组存在重复值时,index只会返回第一个匹配位置,导致后续同值字段被覆盖,最终输出字段数不足24个。 - 字段丢失问题:原有代码直接提取
[.lightValueObjects[].data]处理,直接丢弃了lightValueObjects下除data外的所有其他字段。
正确jq实现
.headerData.methodNames as $header | .lightValueObjects | map( # 保留除data外的所有原始字段 del(.data) + # 直接遍历索引绑定字段,避免反向查索引的错误 (reduce range(.data | length) as $idx ({}; .[$header[$idx]] = (if .data[$idx] == "" then null else .data[$idx] end) )) )
逻辑说明
- 预先存储
methodNames为$header变量复用,保证字段名和值的对应关系和API定义一致。 - 完整遍历
lightValueObjects数组的每一个元素,而非仅提取data字段,保留全部原有属性。 - 采用索引遍历的方式生成结构化字段,无论
data数组是否存在重复值,都能完整生成全部24个对应字段。 - 保留空字符串转
null的处理逻辑,符合需求要求。
内容的提问来源于stack exchange,提问作者Ken
相关产品推荐
相关产品推荐

