json - 在Bash中使用jq按对象属性值的长度降序对它们进行排序

标签 json bash sorting key jq

我有以下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

最佳答案

the values sorted in descending order of length:


[.[]] | sort_by(length) | reverse[]

swap properties for values


with_entries(.key as $k | .key=.value | .value=$k )

结合两个要求

可以通过组合以上两种解决方案来制定组合问题的解决方案,因为with_entriesto_entriesfrom_entries的组合:
to_entries
| map(.key as $k | .key=.value | .value=$k )
| sort_by(.key|length)
| reverse
| from_entries

关于json - 在Bash中使用jq按对象属性值的长度降序对它们进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51914316/

相关文章:

.net - ASP.Net MVC 中的 JsonResult 又名 Json 函数中的控制序列化器?

python - 在 Linux 上安装 cx_Oracle 时出现问题 - 导入仅适用于站点包目录

sorting - Redis 排序集中的大小写不可知词典排序

c++ - 在 C++ 中排序 vector

Android - 除了值之外,如何从 JSON 获取键名

c# - 使用表单序列化的 JSON 对象发布未映射到 C# 对象

bash - 使 cat 命令在目录中递归循环操作

linux - 通过 elinks 输出管道尾部

python - 如何按字符串索引上的自定义顺序对 Pandas 数据框进行排序

javascript - Python - 从 Instagram 视频中抓取观看次数,加载为 JSON 格式