jqで名前にドル記号を持つ属性を参照するにはどうすればよいですか?

jqで名前にドル記号を持つ属性を参照するにはどうすればよいですか?

JSONがあります。

{
  "Data": {
    "$id": "1",
    "voters": {
      "$id": "2",
      "$values": [
        {
          "$id": "3",
          "voterStatus": 0,
          "voterStatusName": "Active",
          "statusReasonName": "Registered",
          "voterTypeName": "Regular"
        }
      ]
    }
  },
  "Success": true,
  "ErrorMessage": null,
  "WarningMessage": null
}

私はvoterStatusの価値が欲しい。これを試しましたが、.Data.voters.$values[0].voterStatus次のエラーが発生します。

$ jq </tmp/Voter.json '.Data.voters.$values[0].voterStatus'
jq: error: syntax error, unexpected '$', expecting FORMAT or QQSTRING_START (Unix shell quoting issues?) at <top-level>, line 1: .Data.voters.$values[0].voterStatus
jq: 1 compile error
$
  1. voterStatusの値を取得するにはどの式を使用する必要がありますか?

  2. .Data.$id値(上記の例では「1」)をどのように取得しますか?

ありがとうございます!

答え1

~からオブジェクト識別子インデックス:.foo、.foo.barjqマニュアルから:

キーに特殊文字が含まれている場合、または数字で始まる場合は、."foo$"や.["foo$"]などの二重引用符で囲む必要があります。

たとえば、.["foo::bar"] と .["foo.bar"] は有効ですが、.foo::bar は無効です。

だから:

$ jq '.Data.voters."$values"[0].voterStatus' file.json
0

そして

$ jq '.Data."$id"' file.json
"1"

関連情報