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"

관련 정보