在 jq 中处理具有特殊字符的 json 对象
Handling json object with special characters in jq
我有一个包含以下元素的 json 对象,
rsrecords="{
"ResourceRecords": [
{
"Value": "\"heritage=external-dns,external-dns/owner=us-east-1:sandbox,external-dns/resource=service/api""
}
],
"Type": "TXT",
"Name": "\052.apiconsumer.alpha.sandbox.test.net.",
"TTL": 300
}"
在我的 bash 脚本中,我有以下代码片段,
jq -r '.[] | .Name ,.ResourceRecords[0].Value' <<< "$rsrecords" | \
while read -r name; read -r value; do
echo $name
输出打印为,
\052.apiconsumer.alpha.sandbox.test.net.
但我希望它打印为 \052.apiconsumer.alpha.sandbox.test.net.
,即 json 对象中的 "Name"..
如何做到这一点?
在进入问题的核心之前,请注意
- 给出的样本数据有点混乱,所以我假设你的意思是这样的:
rsrecords='
{
"ResourceRecords": [
{
"Value": "heritage=external-dns,external-dns/owner=us-east-1:sandbox,external-dns/resource=service/api"
}
],
"Type": "TXT",
"Name": "\052.apiconsumer.alpha.sandbox.test.net.",
"TTL": 300
}
'
- 您的 jq 查询与上述 JSON 不匹配,因此我假设您的查询意图很简单:
.Name, .ResourceRecords[0].Value
无论如何,使用上面的JSON,bash命令:
jq -r '.Name, .ResourceRecords[0].Value' <<< "$rsrecords" |
while read -r name; read -r value; do
echo "$name"
done
产量:
2.apiconsumer.alpha.sandbox.test.net.
这是正确的,因为 JSON 字符串 "\X"
是原始字符串的编码:\X
如果要查看 JSON 字符串,请在不使用 -r 选项的情况下调用 jq。如果您想使用 -r 选项调用 jq 并希望看到两个反斜杠,则必须在 JSON.
中将它们编码为四个反斜杠
我有一个包含以下元素的 json 对象,
rsrecords="{
"ResourceRecords": [
{
"Value": "\"heritage=external-dns,external-dns/owner=us-east-1:sandbox,external-dns/resource=service/api""
}
],
"Type": "TXT",
"Name": "\052.apiconsumer.alpha.sandbox.test.net.",
"TTL": 300
}"
在我的 bash 脚本中,我有以下代码片段,
jq -r '.[] | .Name ,.ResourceRecords[0].Value' <<< "$rsrecords" | \
while read -r name; read -r value; do
echo $name
输出打印为, \052.apiconsumer.alpha.sandbox.test.net.
但我希望它打印为 \052.apiconsumer.alpha.sandbox.test.net.
,即 json 对象中的 "Name"..
如何做到这一点?
在进入问题的核心之前,请注意
- 给出的样本数据有点混乱,所以我假设你的意思是这样的:
rsrecords='
{
"ResourceRecords": [
{
"Value": "heritage=external-dns,external-dns/owner=us-east-1:sandbox,external-dns/resource=service/api"
}
],
"Type": "TXT",
"Name": "\052.apiconsumer.alpha.sandbox.test.net.",
"TTL": 300
}
'
- 您的 jq 查询与上述 JSON 不匹配,因此我假设您的查询意图很简单:
.Name, .ResourceRecords[0].Value
无论如何,使用上面的JSON,bash命令:
jq -r '.Name, .ResourceRecords[0].Value' <<< "$rsrecords" |
while read -r name; read -r value; do
echo "$name"
done
产量:
2.apiconsumer.alpha.sandbox.test.net.
这是正确的,因为 JSON 字符串 "\X"
是原始字符串的编码:\X
如果要查看 JSON 字符串,请在不使用 -r 选项的情况下调用 jq。如果您想使用 -r 选项调用 jq 并希望看到两个反斜杠,则必须在 JSON.
中将它们编码为四个反斜杠