簡體   English   中英

JQ json 中的條件變量取決於參數值?

[英]Conditional variables in JQ json depending on argument value?

我正在嘗試使用帶有 --arg 參數的 jq 構建一個 json,但是如果變量為空,我希望 json 不能有條件。

一個例子,如果我運行以下命令

jq -n --arg myvar "${SOMEVAR}" '{ $myvar}'

如果 myvar 碰巧為空(因為變量 ${SOMEVAR} 不存在),我希望在這種情況下的 json 是{}而不是{ "myvar": "" }這就是我通過運行得到的上面的命令。

有沒有辦法通過某種條件來實現這一目標?

更新:

有關用例的更多詳細信息

我想基於多個環境變量構建一個 json,但只包含具有值的變量。

就像是

{"varA": "value", "varB": "value"}

但是只有在定義了 varA 的值時才包含它,依此類推。 現在的問題是,如果沒有定義 value,屬性varA仍然會以空值存在,並且由於多個參數/變量的性質,按照建議使用 if/else 構建整個 json 將導致大量條件來覆蓋不存在的所有可能的變量組合

假設您有一個變量名稱模板,采用您所建議的對象形式:

{a, b, c}

還假設(為了說明起見)您想從 *ix 環境變量中提取相應的值。 然后你只需要調整模板,這可以使用這個過濾器來完成:

def adjust: with_entries( env[.key] as $v | select($v != null) | .value = $v );

例子:

假設上述過濾器以及以下行位於名為 adjust.jq 的文件中:

 {a,b,c} | adjust

然后:

 $ export a=123
 $ jq -n -f -c adjust.jq 
 {"a":"123"}

您可以使用if/else結構:

jq -n --arg myvar "${SOMEVAR}" 'if ($myvar|length > 0) then {$myvar} else {} end'

仍然不清楚變量-值對來自哪里,所以在調用 jq 之前構造包含映射的對象,然后使用 --argjson 或 --argfile 選項將其傳入可能是最簡單的?

暫無
暫無

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

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