Linuxの長いjsonファイルからjavascriptキーパスを取得する方法

Linuxの長いjsonファイルからjavascriptキーパスを取得する方法

私は、jsonで表示される長いJavaScriptオブジェクトで複数のキーを使用して作業しています。例:

...
"stock": {
  "type": 'str',
  "properties": {
    "warehouse": {
      "type": 123
    },
    "retail": {
      "type": false
    }
  }
}
...

たとえば、keyのフルパスを知りたいと思いますtype。たとえば、手動で取得する必要はありませんget-paht typeroot.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」へのパスとその値を印刷します。

おすすめ記事