从API中,我得到了JSON,它有一个字符串字段,其中有多行和不同的转义字符.我try 输出这个JSON并获取它的一个值.

我try 了不同的组合,比如:

response=$(curl -s -X 'POST' \
  ".../api/generated_message/action/generate" \
  -H 'accept: application/json' | jq -r .)

echo $response
generated_message_id=$(echo $response | jq -r '.generated_message_id')

然而,我总是得到parse error: Invalid string: control characters from U+0000 through U+001F must be escaped at line 17, column 96分.似乎我需要从柯尔那里得到一个逃避的答案.

推荐答案

错误消息肯定是您向jq提供了无效的JSON.

您可能有两个错误(或两个都有):

  1. 您可以将curl输出转换为包含jq -r的非JSON字符串

  2. echo解释JSON中存在的C样式转义序列

以下方法应该可以解决这些问题:

response=$(
    curl -s \
         -X 'POST' \
         -H 'accept: application/json' \
         '.../api/generated_message/action/generate'
)

printf '%s\n' "$response" | jq

generated_message_id=$(
    printf '%s\n' "$response" |
    jq -r '.generated_message_id'
)

Linux相关问答推荐

C++17:G++8.5版似乎无法正确生成无符号64位伪随机整数

如何注释掉SLURM中的延迟调度命令?

如何知道进程组中的所有进程是否都已收集?

将十六进制文件名转换为十进制

在 bash 中使用 tee 时如何返回错误代码

在 cURL 中使用的确切位置将字节分成一些范围部分

使用 AWK 过滤 Linux 输出

使用 AWK 过滤 Linux 输出

Google Cloud Ops Agent Mongo 集成错误 - AuthenticationFailed:SCRAM 身份验证失败,storedKey 不匹配

`std::cout` 是如何实现的?

Linux合并文件

获取变量中的当前路径并使用它

全屏(Fullscreen)小部件

为什么 fork() 在 setsid() 之前

如何在 Linux 中设置目录大小限制?

Linux C程序:如何找到函数所属的库

我可以在 Ubuntu 上使用 Homebrew 吗?

try 使用 sudo 将文件附加到根拥有的文件时权限被拒绝

如何使用 bash 在文件中间添加一行文本?

在 Docker 容器中运行的 JVM 的驻留集大小 (RSS) 和 Java 总提交内存 (NMT) 之间的差异