如何在Azure管道yaml文件中正确包含JSON字符串作为环境变量?

siv3szwd  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(131)

我在azure-pipelines.yaml文件中包含了以下环境变量:

- name: myVariable
    value: '{"key1":"value1","key2":"value2"}'

问题在于管道传递沿着这个变量的方式。当回显时,它看起来像这样:key1:value1 key2:value2,由于我的应用程序需要一个JSON字符串,这会抛出JSONDecodeError(“Extra data”,s,end)。
我尝试使用转义字符对变量进行不同的格式设置,如下所示:
\{\"key1\":\"value1\",\"key2\":\"value2\"\}
这就产生了我所期望的这个回显变量:
{"key1":"value1","key2":"value2"}
但是我的应用程序代码抛出了这个错误JSONDecodeError:属性名称应用双引号括起来。我添加了双引号如下:
"\{\"key1\":\"value1\",\"key1\":\"value1\"\}"
但随后收到以下错误:当分析一个带引号的标量时,发现未知的转义字符。
管道文件似乎不喜欢变量的格式。我想知道我格式化变量的方式是否有问题。我想让变量以我上面描述的方式传递,但是如果其他方法都失败了,我可以用一种更合适的格式传递它,并让我的应用程序代码解析它。会很感激任何想法,谢谢。

rhfm7lfc

rhfm7lfc1#

不知道你的应用程序如何调用JSON。检查变量doc:
变量总是字符串。如果你想使用类型化的值,那么你应该使用参数。
你可以使用convertToJson表达式,它接受一个复杂的对象并将其输出为JSON。

parameters:
  - name: listOfValues
    type: object
    default:
      key1: value1
      key2: value2

steps:
- script: |
    echo "${MY_JSON}"
  env:
    MY_JSON: ${{ convertToJson(parameters.listOfValues) }}

产出:

如果你用它作为变量:

variables:
  - name: myVariable
    value: '{"key1":"value1","key2":"value2"}'

steps:
- script: |
    echo "${newVar}" 
  env:
     newVar: ${{ convertToJson(variables.myVariable) }}

输出量:

您可以检查使用参数或变量进行定义,并在应用程序中调用${MY_JSON}

ulydmbyx

ulydmbyx2#

你试过这个吗,它只是遵循你逃避一切的思维方式?\"\{\"key1\":\"value1\",\"key2\":\"value2\"\}\"也是一个好主意,分享你想要消化这个JSON的任务类型。

相关问题