我正在使用调用Runs endpoint的外部webhook启动一个管道.

webhook正在提供一个我想在管道内解析和使用的SON字符串:

webhook POST payload

我正在收集允许在运行时覆盖的管道变量中的杨森字符串:

pipeline variable definition

我的意思是在Bash@3任务中使用变量:

setting the variable inside the Bash3 task

如果我try 用jq解析并使用变量值,我会得到诸如"第1行,第5列的数字文本无效"这样的错误,这让我认为SON语法一定有问题.

事实上,如果我把它注销,所有的双引号似乎都被删除了:

logging out variable value

Is this really the case? Why?

How could I ensure that the string enters the pipeline with all its doublequotes?

推荐答案

考虑在任务中使用环境变量,而不是分配本地脚本变量.这可能有助于避免特殊字符等问题.

示例:

trigger: none

pool:
  vmImage: 'ubuntu-latest'

steps:
  - task: Bash@3
    inputs:
      targetType: 'inline'
      script: |
        echo "Payload: ${jsonPayload}"
        echo "${jsonPayload}" | jq
    displayName: Echo payload
    env:
      jsonPayload: $(payload) # <--------------------- set environment variable

使用以下SON字符串运行管道,该字符串包含单引号'和双引号":

{"name": "Patrick O'Brien", "age": 30, "value": "{\"key1\": \"value1\", \"key2\": \"value2\"}"}

输出:

Pipeline output

Json相关问答推荐

将数据从嵌套的SON数组提取到更简单的数组中

按照对象键的值对PostgreSQL JSONB对象进行排序'

kotlinx-serialization:如何将具有不同类型对象的JsonArray转换为同一个Class

使用JQ从jsonl文件中删除具有匹配键/值的行

419(未知状态)使用laravel处理PUT请求

在这种情况下我如何实现 UnmarshalJSON 并且只为一个接口字段定义特殊行为?

Golang gin接收json数据和图片

将 JSON 解组为具有唯一元素的 map 切片

使用 jq 获取特定键的所有父键

如何使用 boost::json::value 调用无参数函数

在 Perl Mojolicious 中呈现 JSON 时防止转义字符

杰克逊 2.0 和 Spring 3.1

使用 c# 通用地展平 Json

苗条的 JSON 输出

如何在 Perl 中将简单的哈希转换为 json?

ASP.NET Core API 仅返回列表的第一个结果

MySQL Select JSON 字段属性具有值的位置

严重:找不到媒体类型 = 应用程序/json、类型 = 类 com.jersey.jaxb.Todo、通用类型 = 类 com.jersey.jaxb.Todo 的 MessageBodyWriter

如何使用 Jackson 的 objectMapper 反序列化接口字段?

为什么 RestTemplate 不将响应表示绑定到 PagedResources?