簡體   English   中英

帶有 jq 的無效數字文字

[英]Invalid numeric literal with jq

我有大量來自第 3 方系統的 JSON,我想用 jq 對其進行預處理,但是我在編寫查詢時遇到了困難,測試用例如下:

$ cat test.json
{
  "a": "b",
  "c": "d",
  "e": {
         "1": {
            "f": "g",
            "h": "i"
          }
       }
}
$ cat test.json|jq .e.1.f
jq: error: Invalid numeric literal at EOF at line 1, column 3 (while parsing '.1.') at <top-level>, line 1:
.e.1.f

我如何在這里得到“g”作為我的輸出? 或者如何將 1 轉換為“1”以便正確處理?

來自jq手冊

您還可以使用如下語法查找對象的字段。[“foo”](上面的.foo是此的簡寫版本,但僅適用於類似標識符的字符串)。

如果您想要原始輸出,還需要引號並使用-r

jq -r '.e["1"].f' test.json

我編寫了一個調用 curl 命令的 shell 腳本函數,並將其通過管道傳輸到 jq 命令中。

function getName {
  curl http://localhost:123/getname/$1 | jq;
}
export -f getName

當我從 CLI 運行這個時,

getName jarvis

我得到了這樣的回應:

解析錯誤:第 1 行第 72 列的數字文字無效

我嘗試刪除 | jq 從 curl 命令,我得到了沒有 jq 解析的結果:

<Map><timestamp>1234567890</timestamp><status>404</status><error>Not Found</error><message>....

我首先認為我在 curl 命令中有一個錯誤的字符,或者我使用了函數 param $1 錯誤。

然后我計算了結果字符串中的字符數,我注意到該字符串中的第 72 個字符是“未找到”之間的空格。

潛在的問題是我的 spring REST 控制器中還沒有名為 getname 的方法,因此響應返回 404 Not Found。 但此外,除了輸出錯誤消息外,jq 沒有處理響應中的空白空間。

我是 jq 的新手,所以也許有辦法解決空白空間問題,但那是另一天。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM