如何在 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.bar在 jq 手册中:

如果键包含特殊字符或以数字开头,则需要用双引号将其引起来,如下所示:."foo$",或者 .["foo$"]。

例如 .["foo::bar"] 和 .["foo.bar"] 有效,而 .foo::bar 无效。

所以:

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

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

相关内容