JQ json 中的条件变量取决于参数值?

Conditional variables in JQ json depending on argument value?

我正在尝试使用带有 --arg 参数的 jq 构建一个 json,但是我希望 json 在变量为空时不能有条件。

举个例子,如果我运行下面的命令

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

如果 myvar 恰好为空(因为变量 ${SOMEVAR} 不存在)而不是 { "myvar": "" },我希望 json 在这种情况下为 {}这是我通过 运行ning 上面的命令得到的结果。

有什么办法可以通过某种条件来实现吗?

更新:

有关用例的更多详细信息

我想构建一个基于多个环境变量的 json,但只包含有值的变量。

类似

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

但只有在定义了 varA 的值时才包括它等等。现在的问题是,如果未定义值,属性 varA 仍将存在空值,并且由于多重 argument/variable 性质,使用 if/else 构建建议的整个 json 将产生大量条件,以涵盖不存在的所有可能的变量组合

您可以使用 if/else 结构:

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

假设您有一个变量名模板,按照您的建议以对象的形式出现:

{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"}

目前还不清楚 variable-value 对来自哪里,所以可能最简单的方法是在调用 jq 之前构造包含映射的对象,然后使用 --argjson 或 - -argfile 选项?