Json
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,我想在官方倉庫中保留該版本。
有人知道解決這個問題的方法嗎?
謝謝
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" } } } } }