如何使用jq按Id和Order两列对JSON文件排序?
使用jq按Id和Order字段排序JSON并生成新文件
你可以通过以下jq命令完成两层排序:对顶层value数组按Id排序,同时对每个value元素内的Media数组按Order排序,最终输出完整的排序后JSON到新文件:
jq '(.value |= (sort_by(.Id) | map(.Media |= sort_by(.Order))))' input.json > output.json
命令解释
(.value |= ...):保留JSON顶层的所有原始字段(如@odata.context、@odata.count),仅修改value数组sort_by(.Id):将value数组中的元素按Id字段升序排列map(.Media |= sort_by(.Order)):遍历每个value元素,将其内部的Media数组按Order字段升序排列input.json是你的原始JSON文件名,output.json是生成的排序后文件
降序排序调整
如果需要按字段降序排序,只需在排序字段前加负号:
- 按
Id降序、Order降序:jq '(.value |= (sort_by(-.Id) | map(.Media |= sort_by(-.Order))))' input.json > output.json
效果验证
以你提供的JSON为例,执行命令后:
value数组会按Id从SOMETHING_9988到SOMETHING_9999排列- 每个元素的
Media数组会按Order从1到2排列,Order=1的元素会排在Order=2的元素之前
内容的提问来源于stack exchange,提问作者Tahir Khalil
相关产品推荐
相关产品推荐

