Jq EOF 处的无效数字文字

Mar*_*ala 2 json jq

我尝试在 Json 文件中添加一个为 Raid 信息构造的记录

jq '.raid.c0.e252.s0  +={"device": "/c0/e252/s0"}' file.json
Run Code Online (Sandbox Code Playgroud)

但我有两个错误:

jq: error: Invalid numeric literal at EOF at line 1, column 5 (while parsing '.e252') at <top-level>, line 1:
.raid.c0.e252.s0  +={"device": "/c0/e252/s0"}
jq: error: syntax error, unexpected LITERAL, expecting $end (Unix shell quoting issues?) at <top-level>, line 1:
.raid.c0.e252.s0  +={"device": "/c0/e252/s0"}
jq: 2 compile errors
Run Code Online (Sandbox Code Playgroud)

经过一些测试,我明白问题是字段名称。显然e<number>不被接受。事实上,使用:

jq '.raid.c0.p252.s0  +={"device": "/c0/e252/s0"}' file.json
Run Code Online (Sandbox Code Playgroud)

或者

jq '.raid.c0.eid252.s0  +={"device": "/c0/e252/s0"}' file.json
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我都得到了预期的结果:

{
  "raid": {
    "c0": {
      "eid252": {
        "s0": {
          "device": "/c0/e252/s0"
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

显然不是什么大问题,我可以使用任何字段名称,但从设备名称/c0/e252/s0开始查询应该更简单.c0.e252.s0

jq 版本是 1.6,我想在官方仓库中保留该版本。

有人知道解决这个问题的方法吗?

谢谢

Aub*_*gne 7

由于值e252的解析方式,会发生此问题。

它被视为指数 ( e252 = 10^252),但这种表示法需要一个前导数字,例如1e252 = 1x10^252. 意外的格式是您收到“无效数字文字”解析错误的原因。

显然,您正在寻找 的字符串文字e252,因此您应该能够将以下内容用于您的意图:

jq '.raid.c0."e252".s0 +={"device": "/c0/e252/s0"}' < file.json

这使:

{
  "raid": {
    "c0": {
      "eid252": {
        "s0": {
          "device": "/c0/e252/s0"
        }
      },
      "e252": {
        "s0": {
          "device": "/c0/e252/s0"
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)