使用 jq 从 JSON 文件中递归获取键名

Posted

技术标签:

【中文标题】使用 jq 从 JSON 文件中递归获取键名【英文标题】:Get key names from JSON file recursively using jq 【发布时间】:2018-05-15 11:12:16 【问题描述】:

我可以使用jq 获取*** JSON 密钥

jq 'keys'

例如,看到这个问题:Get key names from JSON file using jq

我可以在jq 中启用递归:

jq '..'

如:Recursive search values by key

但是jq '.. | keys' 返回jq: error at <stdin> string has no keys

【问题讨论】:

【参考方案1】:

当 JSON 中的某些值不存在键时忽略键:

jq '.. | keys?'

【讨论】:

这不适用于对象数组: $ echo ' "array1" : [ "obj" : "data" ] ' | jq'.. |钥匙?产生:[“array1”][0][“obj”]【参考方案2】:

检查键名时忽略非对象:

jq -r '.. | if type == "object" then to_entries[] | .key else empty end' "$LOCALAPPDATA/Google/Chrome/User Data/default/Bookmarks" | sort --uniq
bookmark_bar
checksum
children
date_added
date_modified
guid
id
name
other
roots
synced
type
url
version

【讨论】:

以上是关于使用 jq 从 JSON 文件中递归获取键名的主要内容,如果未能解决你的问题,请参考以下文章

使用 jq 保留键名展平 JSON

从 JSON 中获取键名和值名并在 Highcharts 中使用

redis 基本命令

有没有办法在 JSON 文件的值中获取键名

使用 TSQL OPENJSON 如何从具有动态键名的 JSON 数组中提取值

使用键名索引 json 对象给出错误 [[keyname]] 不能用于索引类型“对象”