如何在`jq`中除錯

使用`debug`函式的一些技巧


jq 內建一個方便的 debug 過濾器。 在開發練習解法時,你可以用它來檢視目前位於 jq 管線中的資料。

debug 會把「除錯陣列」輸出到 stderr。 它會原封不動地輸出輸入。 陣列的第一個元素是字串「DEBUG:」。 第二個元素取決於你如何呼叫 debug。

  1. 零引數的 debug 函式會把輸入的緊湊表示法放進除錯陣列:

    jq -n '[11, 22, 33] | debug | map(. * 2)'
    

    輸出

     ["DEBUG:",[11,22,33]]
     [
       22,
       44,
       66
     ]
    
  2. 單引數版本則會把輸入送進指定的過濾器:

    jq -n '[11, 22, 33] | debug("length: \(length), last: \(.[-1])") | map(. * 2)'
    
     ["DEBUG:","length: 3, last: 33"]
     [
       22,
       44,
       66
     ]
    

    過濾器不一定要是字串。 它可以是任何東西,包括用逗號分隔的多個運算式,用來產生「多行」的除錯輸出:

    jq -n '[11, 22, 33] as $a | 44 | debug("I am here:", $a, .)'
    
    ["DEBUG:","I am here:"]
    ["DEBUG:",[11,22,33]]
    ["DEBUG:",44]
    44