我有一个较大且相对复杂的 json 配置文件,我想使用“grep”等简单工具搜索键和/或值。当我'grep'我希望在输出中包含的文件包含键的完整路径以及导致最终值的每个子键/数组时。
这类似于在大型文件系统中搜索文件/目录,并且在找到文件/目录时能够看到文件/目录的完整路径,例如使用“find”命令。
同样作为与我试图完成的类似比较的是 xml2 实用程序,它将 xml 文件转换为键/值路径,以便于搜索和报告。
我一直在使用 'jq' 实用程序使用 'keys' 命令解析 json 文件。我已经将一个粗略的 bash 脚本拖到了一起,以遍历 json 键路径的第一个分支——但找不到一种简单的方法来递归地遍历 json 结构的完整树。
这是我在 bash 脚本中尝试执行的操作的手动说明。是的,它的效率非常低,但我想我会在提高性能之前让它工作!
给定包含复杂配置的 file.json,我使用键来获取第一项,一旦我有了它,我就在另一个迭代中使用它来获取下一个键,依此类推,直到到达分支的末尾......
cat file.json | jq '. | keys | .[]'
cat file.json | jq '.Blueprints | keys | .[]'
cat file.json | jq '.Blueprints.security | keys | .[]'
cat file.json | jq '.Blueprints.security.kerberos_descriptor | keys | .[]'
cat file.json | jq '.Blueprints.security.kerberos_descriptor.identities | keys | .[]'
Run Code Online (Sandbox Code Playgroud)
最终的结果最终看起来是这样的:
."Blueprints"."security"."kerberos_descriptor"."identities"[0]."keytab"."configuration"."cluster-env/smokeuser_keytab"
Run Code Online (Sandbox Code Playgroud)
但当然,这只是非常大的键/值树的第一个分支。