web-dev-qa-db-ja.com

基本的なjqの使用法。ネストされた値を取得する方法

これは信じられないほど単純なはずですが、manページは私には意味がありません。 curl example.com/json私に

{
 "stats": {
  "storage_server.disk_total": XXXXXXXXXX
 },
 "counters": {}
}

そして、disk_totalの値XXXXXXXXXXを抽出したいと思います。これを行うための構文は何ですか?

9
nullUser
  1. Jqクエリの作成方法を学ぶには、「man」ページよりも tutorial および manual を参照する方が便利です。 [〜#〜] faq [〜#〜] もあります。
  2. 内部キー名にはピリオドが含まれているため、.keyname速記は使用できません。だからあなたは書くことができます:
   .stats["storage_server.disk_total"] 

または、jqで許可されている場合:

   .stats."storage_server.disk_total" 

これらは両方とも次の略語です。

   .stats | .["storage_server.disk_total"] 
7
peak

キーによってdeeplyネストされた値を取得するには:

$ jq '.. |."storage_server.disk_total"? | select(. != null)'

..はゼロ引数のショートカットですrecurse -XPathのアナログ//演算子。

3
jfs

`storage_server.disk_total"のドットは、オブジェクトキーセパレータとして解釈されないようにエスケープする必要があります。次のように使用できます。

jq '.stats."storage_server.disk_total"'

XXXXXXXXXXが実際のJSONで有効なJSON番号であると仮定します。

1
Hans Z.