jqコマンドで数値のキーをパースする

スポンサード リンク

jqコマンドはjsonを標準入力から受け付けていろいろやってくれるコマンド。 指定したキーの値を取り出すこともできる。しかし,数値がキーとなっている場合は ちょっとコツが必要であったのでやり方を記録しておく。

次のようなJsonテキストをパースして test1 を取り出したいとする。

$ echo '{"test": {"1": "test1", "hoge": 2}}' | jq '.'
{
  "test": {
    "1": "test1",
    "hoge": 2
  }
}

jq コマンドでは . でキー名を連結することで値を取り出せる。

$ echo '{"test": {"1": "test1", "hoge": 2}}' | jq '.test'
{
  "1": "test1",
  "hoge": 2
}

ただし,数値がキーとなっている場合はエラーとなる。

$ echo '{"test": {"1": "test1", "hoge": 2}}' | jq '.test.1'
jq: error: syntax error, unexpected LITERAL, expecting $end (Unix shell quoting issues?) at <top-level>, line 1:
.test.1
jq: 1 compile error

この場合, ["1"] という形式で指定してやることで数値をキーとして指定できる。

$ echo '{"test": {"1": "test1", "hoge": 2}}' | jq '.test["1"]'
"test1"

以上。

Comments !

social