首页 > 解决方案 > 使用 JQ 去除值中的双引号

问题描述

我正在尝试在--data-raw的帮助下创建一个jq,它在大多数情况下都可以正常工作,除非我有一个列表。

#!/bin/bash
TEST="'bfc', 'punch', 'mld', 'extended_mld', 'chargingstation', 'ch'"
BFC_TAG=$BUILD_ID
UPLOAD_TO=s3
COMPILE=$test
REGION=world
PROJECT=bfc
JSON_STRING=$( jq -n \
--arg a "$BFC_TAG" \
--arg b "$UPLOAD_TO" \
--arg c "$TEST" \
--arg d "$REGION" \
--arg f "$PROJECT" '
{brfc_tag: $a,
upload_to: $b,
compile: [ $c ],
region: $d,
project: $f
}')
echo ${JSON_STRING}

输出:

{ "bfc_tag": "", "upload_to": "s3", "compile": [ "'bfc', 'punch', 'mld', 'extended_mld', 'chargingstation', 'ch'" ], "region": "world", "project": "bfc" }

如果你查看输出,特别是compile它在开头和结尾都有“”的键,这会破坏 python 代码,它会消耗这个,我需要去掉编译中的双引号,任何帮助都会得到帮助。

标签: bashjq

解决方案


这些单引号已经存在于您的输入字符串中:

TEST="'bfc', 'punch', 'mld', 'extended_mld', 'chargingstation', 'ch'"

我建议删除这些,并创建一个简单的 csv 女巫 JQ 可以为我们拆分

TEST="bfc,punch,mld,extended_mld,chargingstation,ch"

要从该字符串创建一个数组,请使用;

compile: $c | split(",")

所以完整的代码:

#!/bin/bash
TEST="bfc,punch,mld,extended_mld,chargingstation,ch"
BFC_TAG=$BUILD_ID
UPLOAD_TO=s3
COMPILE=$test
REGION=world
PROJECT=bfc
JSON_STRING=$( jq -n \
--arg a "$BFC_TAG" \
--arg b "$UPLOAD_TO" \
--arg c "$TEST" \
--arg d "$REGION" \
--arg f "$PROJECT" '
{brfc_tag: $a,
upload_to: $b,
compile: $c | split(","),
region: $d,
project: $f
}')
echo ${JSON_STRING}

将产生:

{ "brfc_tag": "", "upload_to": "s3", "compile": [ "bfc", "punch", "mld", "extended_mld", "chargingstation", "ch" ], "region": "world", "project": "bfc" }

推荐阅读