【发布时间】:2022-08-02 17:45:52
【问题描述】:
我有一个有效的 JSON 值,它是从字符串中使用 JQ 生成的,
# key1:value1,key2:value2 --> {\"key1\":\"value1\",\"key2\":\"value2\"}
input=\'key1:value1,key2:value2\'
json=$( jq -Rc \'split(\",\") | map( split(\":\") | {(.[0]): .[1]}) add |\' <<<\"$input\" )
echo $json
这工作得很好,但现在我想将 json 转换为字符串而不转义每个键和值的双引号,只需要在末尾添加单引号。
# {\"key1\":\"value1\",\"key2\":\"value2\"} ---> \'{\"key1\":\"value1\",\"key2\":\"value2\"}\'
我尝试了 tostring 函数,但它转义了所有双引号
strJson=$(jq tostring <<< \"$json\")
echo $strJson
-
print -v quoted \"\'%s\'\" \"$json\"; echo \"$quoted\" -
@Inian 我在 Azure Pipeline shell 中运行它,它说“无法初始化设备 PRN”。
-
顺便说一句,
echo $anything有问题;它应该始终是echo \"$anything\"。见I just assigned a variable butecho $variableshows something else! -
顺便说一句——“用单引号括起来”的具体上下文是什么?通常单引号对于字面值是正确的,但对于存储在变量中的值是错误的。例如,写 json=\'{\"foo\": \"bar\"}\'` 是正确的,但这些引号实际上并不是您存储值的一部分;相反,它们是关于如何解析该值的指令。
-
@CharlesDuffy 我必须通过 cli 的 \'--set-string\' 标志将此 JSON 作为字符串传递给 Helm 图表。因此,用户将在管道参数中输入键、值对的上下文将被转换为 JSON,然后作为字符串传递,而不会将双引号转义到 helm 图表。 Helm 图表本身在处理变量的 JSON 值方面非常糟糕,它们将在即将发布的版本中引入一个 --set-json 标志,这将更加方便