Json

Jq EOF 處的無效數字文字

  • April 23, 2021

我正在嘗試在 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,我想在官方倉庫中保留該版本。

有人知道解決這個問題的方法嗎?

謝謝

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"
       }
     }
   }
 }
}

引用自:https://unix.stackexchange.com/questions/646430