【问题标题】:Escape field name in jq that contains '@' and '-'? [duplicate]jq中包含'@'和'-'的转义字段名称? [复制]
【发布时间】:2018-12-31 19:49:52
【问题描述】:

输入 JSON:

{
  "abc": {
    "@def-ghi": "value1",
    "xyz": "value2"
  }
}

我正在尝试获取字段 @def-ghi 的值。

➜ $?=0 ➤ echo '{"abc": {"@def-ghi": "value1", "xyz": "value2"}}' | jq '.abc.xyz'
"value2"
➜ $?=0 ➤ echo '{"abc": {"@def-ghi": "value1", "xyz": "value2"}}' | jq '.abc.@def-ghi'
jq: error: syntax error, unexpected '-', expecting QQSTRING_START (Unix shell quoting issues?) at <top-level>, line 1:
.abc.@def-ghi
jq: 1 compile error
➜ $?=3 ➤

如何正确转义字段名?

【问题讨论】:

    标签: key special-characters jq


    【解决方案1】:

    最健壮的替代方法是使用基本形式:

    .[KEY]
    

    其中 KEY 是 JSON 字符串,包括外引号。

    然而,这个表单必须是流水线的,所以你必须写:

    jq '.abc|.["@def-ghi"]'
    

    .[_] 形式也可用于数组,但当然 _ 必须是整数。)

    【讨论】:

    • 你能举例解释一下吗?这行不通。 jq '.abc.["@def-ghi"]'
    • @AbhijeetRastogi - 查看更新。
    【解决方案2】:

    你只需要引用密钥:

    $ echo '...' | jq '.abc."@def-ghi"'
    "value1"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-14
      相关资源
      最近更新 更多