繁体   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