web-dev-qa-db-ja.com

jqで無効な数値リテラル

Jqで前処理したいサードパーティシステムからの大量のJSONがありますが、クエリの作成に問題があります。テストケースは次のとおりです。

$ cat test.json
{
  "a": "b",
  "c": "d",
  "e": {
         "1": {
            "f": "g",
            "h": "i"
          }
       }
}
$ cat test.json|jq .e.1.f
jq: error: Invalid numeric literal at EOF at line 1, column 3 (while parsing '.1.') at <top-level>, line 1:
.e.1.f

ここで出力として「g」を取得するにはどうすればよいですか?または、その1を「1」にキャストして正しく処理するにはどうすればよいですか?

5
Gaius

から jqマニュアル

。["foo"]のような構文を使用してオブジェクトのフィールドを検索することもできます(上記の.fooはこれの省略形ですが、識別子のような文字列に対してのみです)。

生の出力が必要な場合は、引用符も必要で、-rを使用します。

jq -r '.e["1"].f' test.json
4
Bertrand Martel