我有以下JSON代码段:
{
"root_path": "/www",
"core_path": "/www/wp",
"content_path": "/www/content",
"vendor_path": "/www/vendor"
}
我想先使用jq
来获取按长度降序排列的值:
/www/content
/www/vendor
/www/wp
/www
我需要这些文件,以便与文件列表进行匹配,以查找文件所在的命名路径。
然后我想再次使用jq
来将属性交换为值(它可以删除重复的属性,没关系):
{
"/www": "root_path".
"/www/wp": "core_path",
"/www/content": "content_path",
"/www/vendor": "vendor_path"
}
第二个查询的用例是能够查找匹配的路径值并找到其路径名,然后将其用于具有相同架构的第二个JSON代码片段中,以获取命名路径的值。
我的用例是用于网站部署,我有一个配置文件,其中包含文件名,因为它们将存在于部署服务器上,应该从源服务器复制到部署服务器,但是服务器可能具有不同的目录布局。
我需要为此使用Bash,但是如果有更好的方法来做我想做的事情,我会开放的。也就是说,我确实确实想学习如何更好地使用jq
,所以我更愿意学习如何使用jq
进行这些转换。
我正在使用jq
版1.5
答案 0 :(得分:3)
这些值以长度的降序排列:
[.[]] | sort_by(length) | reverse[]
交换属性值
with_entries(.key as $k | .key=.value | .value=$k )
可以通过组合以上两种解决方案来制定解决组合问题的方案,因为with_entries
是to_entries
和from_entries
的组合:
to_entries
| map(.key as $k | .key=.value | .value=$k )
| sort_by(.key|length)
| reverse
| from_entries