JQ诊断:获取带数据类型的JSON全路径
用JQ获取JSON所有标量路径及对应数据类型
你可以通过修改现有脚本,结合getpath(.)和type操作,同时生成路径字符串与对应值的类型,最终输出目标格式的结果。
修改后的JQ脚本
paths(scalars) | ( map(if type == "number" then "[]" else tostring end) | join(".") ) as $path | { ($path): (getpath(.) | type) } | unique
脚本说明
- 生成标量路径:
paths(scalars)会遍历JSON中所有标量值(字符串、数字、布尔值等),返回每个值对应的路径数组,例如["items", 0, "_maintainer", "value"]。 - 转换路径为目标格式:遍历路径数组的每个元素,将数组索引(数字类型)替换为
[],其余元素转为字符串后用.拼接,得到如items.[]._maintainer.value的路径字符串。 - 获取数据类型:用
getpath(.)根据当前路径取出对应的值,再通过type获取其数据类型(string/number/boolean等)。 - 生成键值对对象:通过
{ ($path): ... }将路径字符串作为键、类型作为值,生成单个对象。 - 去重:
unique确保数组中不会出现重复的路径-类型对象(比如数组内多个元素的相同结构路径)。
示例输出
用你提供的JSON测试该脚本,会得到如下结果:
[ { "_links.self.href": "string" }, { "_links.self.type": "string" }, { "items.[]._links.parent.href": "string" }, { "items.[]._links.parent.type": "string" }, { "items.[]._links.self.href": "string" }, { "items.[]._links.self.type": "string" }, { "items.[]._maintainer._id": "number" }, { "items.[]._maintainer.email": "string" }, { "items.[]._maintainer.value": "boolean" }, { "totalCount": "number" } ]
内容的提问来源于stack exchange,提问作者Jeremys
相关产品推荐
相关产品推荐

