如何使用jq将JSON对象转换为按Tag排序的数组
问题:将JSON对象转为数组并按Tag字段排序
原始JSON对象:
{ "1eba648810a9": { "ID": "1eba648810a9", "Tag": "1.0.237" }, "2df272728204": { "ID": "2df272728204", "Tag": "1.0.243" }, "2f5a63db6634": { "ID": "2f5a63db6634", "Tag": "1.0.179" }, "91a86fec59b1": { "ID": "91a86fec59b1", "Tag": "1.0.202" }, "9aa95de44891": { "ID": "9aa95de44891", "Tag": "1.0.189" }, "a1caaccdba45": { "ID": "a1caaccdba45", "Tag": "1.0.183" }, "a35ad9d93e62": { "ID": "a35ad9d93e62", "Tag": "1.0.42" }, "a4e57f2db7eb": { "ID": "a4e57f2db7eb", "Tag": "1.0.181" }, "d0254d6406e0": { "ID": "d0254d6406e0", "Tag": "1.0.253" }, "ddeeb3d41a4c": { "ID": "ddeeb3d41a4c", "Tag": "1.0.177" }, "f92356a49d78": { "ID": "f92356a49d78", "Tag": "1.0.178" } }
需要将上述对象转换为数组,并按Tag字段排序,最终期望结果如下:
[ { "ID": "ddeeb3d41a4c", "Tag": "1.0.177" }, { "ID": "f92356a49d78", "Tag": "1.0.178" }, { "ID": "2f5a63db6634", "Tag": "1.0.179" }, { "ID": "a4e57f2db7eb", "Tag": "1.0.181" }, { "ID": "a1caaccdba45", "Tag": "1.0.183" }, { "ID": "9aa95de44891", "Tag": "1.0.189" }, { "ID": "91a86fec59b1", "Tag": "1.0.202" }, { "ID": "1eba648810a9", "Tag": "1.0.237" }, { "ID": "2df272728204", "Tag": "1.0.243" }, { "ID": "d0254d6406e0", "Tag": "1.0.253" }, { "ID": "a35ad9d93e62", "Tag": "1.0.42" } ]
注:按版本字符串排序存在不完全正确的问题,此为独立议题,本次仅需实现基于字符串的排序,且仅使用jq工具完成。
解决方案
使用以下jq命令即可完成转换与排序:
jq '. | values | sort_by(.Tag)' input.json
命令解释:
.:表示输入的整个JSON对象。values:提取对象中所有的值,将其转换为数组(这一步就把原始的键值对对象转为包含所有子对象的数组)。sort_by(.Tag):根据每个子对象的Tag字段进行字符串排序。
执行该命令后,输出结果即为期望的排序后数组。
内容的提问来源于stack exchange,提问作者Stephen Rasku
相关产品推荐
相关产品推荐

