Path jq:在未知输入结构的深处按名称搜索属性并打印路径

Path jq:在未知输入结构的深处按名称搜索属性并打印路径,path,jq,Path,Jq,标题说明了一切:一个jq程序接受一个输入JSON文档,我对它的结构只略为熟悉,我希望它打印出其中所有具有特定名称的属性的路径 假设您希望找到具有名为“b”的键的对象的路径。一种方法是使用如下所示的路径(对象): def data: {a:{b:1,c:{b:2}}}; data | paths(objects | has("b") ) 或者更有效一点: data | paths | select( .[-1] == "b" ) | .[:-1] 调用:jq-n-c-f program.jq

标题说明了一切:一个jq程序接受一个输入JSON文档,我对它的结构只略为熟悉,我希望它打印出其中所有具有特定名称的属性的路径

假设您希望找到具有名为“b”的键的对象的路径。一种方法是使用如下所示的路径(对象):

def data: {a:{b:1,c:{b:2}}};

data
| paths(objects | has("b") )
或者更有效一点:

data
| paths
| select( .[-1] == "b" )
| .[:-1]
调用:jq-n-c-f program.jq

输出:

["a"]
["a","c"]

这里有一个老问题,但这是我的典型用例

有关此特定类型问题的解决方案,请参见:

用法,例如
json2jqpath.jq file.json | grep“特定名称”

基本上将任意.json文件缩减为
可在其中寻址的路径的完整列表

还允许转换为类似xml、类似xpath的字符串
以及创建json结构的GraphVis呈现

一个警告是,如果存在空数组,则必须
将您自己的
附加到
[]
以使其成为可选项。
新版本在大多数情况下都能解决这个问题