Jq EOF 处的数字文字无效

Jq EOF 处的数字文字无效

我尝试在 Json 文件中添加 Raid 信息结构的记录

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

但我有两个错误:

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

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

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

或者

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

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

{
  "raid": {
    "c0": {
      "eid252": {
        "s0": {
          "device": "/c0/e252/s0"
        }
      }
    }
  }
}

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

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

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

谢谢

答案1

此问题的发生是由于值的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"
        }
      }
    }
  }
}

相关内容