jq:在未知输入结构内部按名称搜索属性并打印路径

时间:2017-07-27 08:52:41

标签: path jq

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

2 个答案:

答案 0 :(得分:2)

假设您要查找具有名为“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"]

答案 1 :(得分:0)

这里的问题比较老,但这是我的典型用例。

有关此特定类型问题的解决方案,请参见:
https://github.com/TomConlin/json_to_paths

用法例如
json2jqpath.jq file.json | grep "certain_name"

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

还允许转换为类似xml-xpath的字符串
并创建json结构的GraphVis渲染。

一个警告是,如果必须有空数组,则必须
将您自己的?附加到[]上以使其成为可选内容。

新版本在大多数情况下都能解决