
私は、jsonで表示される長いJavaScriptオブジェクトで複数のキーを使用して作業しています。例:
...
"stock": {
"type": 'str',
"properties": {
"warehouse": {
"type": 123
},
"retail": {
"type": false
}
}
}
...
たとえば、keyのフルパスを知りたいと思いますtype
。たとえば、手動で取得する必要はありませんget-paht type
。root.somethingElse.stock.properties.retail.type
ファイルが長すぎて上下に検索するのは効率的ではないようです...
CliまたはGuiツールが動作します。ただし、この結果を返すアプリ、拡張機能、またはコマンドラインツールは見つかりません。
Chromeの「JsonView」を試してみましたが、ローカルファイルを読み込めませんでした。
ジャック一部の二重引用符がないため、問題が解決しないようです。
編集する:私はjsonとしてマークされていますが、これはjsオブジェクトであることを知っています。
答え1
一つで始まる正しく形成されましたそしてMWEを完了してください。
{
"stock": {
"type": "str",
"properties": {
"warehouse": {
"type": 123
},
"retail": {
"type": false
}
}
}
}
jq
次に(v1.5)を使用してください。
$ jq -M -c 'path(..|.type? // empty) | join(".")' mwe.json
"stock.type"
"stock.properties.warehouse.type"
(-r
出力から参照を省略するために追加され、書式付き出力のみ-M
)-c
"()で評価してから、パス配列を平面化()します。..
?
//
join()
1つの考えられる問題は、false
値(またはnull)が実行されempty
(少なくともv1.5ではv1.4ではない)stock.properties.retail.type
項目が省略されることです。
それ以外の場合は、| join(".")
便利なJSON配列を取得します。
["stock","type"]
["stock","properties","warehouse","type"]
値を含むより複雑なバージョン:
$ jq -M -c '[paths(.|select(type=="object" and has("type")) )][] \
as $path | [$path+["type"], getpath($path + ["type"])]' mwe.json
[["stock","type"],"str"]
[["stock","properties","warehouse","type"],123]
[["stock","properties","retail","type"],false]
これはもう少しエレガントです。 「type」の子を持つすべてのオブジェクトを選択して配列を作成し、「type」へのパスとその値を印刷します。