jq double backslash sometime removed
up vote
0
down vote
favorite
I have a first json file like this:
{
"env_vars": {
"TERRAFORM_CFG_TLS_CERT": "-----BEGIN CERTIFICATE----\nMIIIqzCCB5O"
}
}
If I use the command:
echo <file> | jq -r '.env_vars'
The result is as expected (the backslash are still there):
{
"TERRAFORM_CFG_TLS_CERT": "-----BEGIN CERTIFICATE----\nMIIIqzCCB5O"
}
But if i execute this command:
cat <file> | jq -r '.env_vars' | jq -r 'keys as $k | "($k)="(.[$k])""'
The result is:
TERRAFORM_CFG_TLS_CERT: "-----BEGIN CERTIFICATE----nMIIIqzCCB5O"
=> One backslash has been removed... why ?
How to avoid this ?
Thanks.
json string jq backslash
add a comment |
up vote
0
down vote
favorite
I have a first json file like this:
{
"env_vars": {
"TERRAFORM_CFG_TLS_CERT": "-----BEGIN CERTIFICATE----\nMIIIqzCCB5O"
}
}
If I use the command:
echo <file> | jq -r '.env_vars'
The result is as expected (the backslash are still there):
{
"TERRAFORM_CFG_TLS_CERT": "-----BEGIN CERTIFICATE----\nMIIIqzCCB5O"
}
But if i execute this command:
cat <file> | jq -r '.env_vars' | jq -r 'keys as $k | "($k)="(.[$k])""'
The result is:
TERRAFORM_CFG_TLS_CERT: "-----BEGIN CERTIFICATE----nMIIIqzCCB5O"
=> One backslash has been removed... why ?
How to avoid this ?
Thanks.
json string jq backslash
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I have a first json file like this:
{
"env_vars": {
"TERRAFORM_CFG_TLS_CERT": "-----BEGIN CERTIFICATE----\nMIIIqzCCB5O"
}
}
If I use the command:
echo <file> | jq -r '.env_vars'
The result is as expected (the backslash are still there):
{
"TERRAFORM_CFG_TLS_CERT": "-----BEGIN CERTIFICATE----\nMIIIqzCCB5O"
}
But if i execute this command:
cat <file> | jq -r '.env_vars' | jq -r 'keys as $k | "($k)="(.[$k])""'
The result is:
TERRAFORM_CFG_TLS_CERT: "-----BEGIN CERTIFICATE----nMIIIqzCCB5O"
=> One backslash has been removed... why ?
How to avoid this ?
Thanks.
json string jq backslash
I have a first json file like this:
{
"env_vars": {
"TERRAFORM_CFG_TLS_CERT": "-----BEGIN CERTIFICATE----\nMIIIqzCCB5O"
}
}
If I use the command:
echo <file> | jq -r '.env_vars'
The result is as expected (the backslash are still there):
{
"TERRAFORM_CFG_TLS_CERT": "-----BEGIN CERTIFICATE----\nMIIIqzCCB5O"
}
But if i execute this command:
cat <file> | jq -r '.env_vars' | jq -r 'keys as $k | "($k)="(.[$k])""'
The result is:
TERRAFORM_CFG_TLS_CERT: "-----BEGIN CERTIFICATE----nMIIIqzCCB5O"
=> One backslash has been removed... why ?
How to avoid this ?
Thanks.
json string jq backslash
json string jq backslash
edited Nov 22 at 16:47
peak
29.7k83955
29.7k83955
asked Nov 22 at 16:01
Samuel Mutel
51
51
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
up vote
0
down vote
Using the -r option tells jq to "translate" the JSON string into a "raw" string by interpreting the characters that are special to JSON (see e.g. http://json.org). Thus, following the [mcve] guidelines a bit more closely, we could start with:
$ jq . <<< '"X\nY"'
"X\nY"
$ jq -r . <<< '"X\nY"'
XnY
If you check the json.org specification of strings, you'll see this is exactly correct.
So if for some reason you want each occurrence of \
in the JSON string to be replaced by two backslash characters (i.e. JSON: "\\"
), you could use sub
or gsub
. That's a bit tricky, because the first argument of these functions is a regex. Behold:
$ jq -r 'gsub("\\"; "\\")' <<< '"X\nY"'
X\nY
add a comment |
up vote
0
down vote
You should output the string as json to preserve the escapes. By taking a string and outputting it raw, you're getting exactly what that string was, a literal backslash followed by an n
.
$ ... | jq -r '.env_vars | to_entries | "(.key): (.value | tojson)"'
If any of the values are non-strings, add a tostring
to the filter.
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
Using the -r option tells jq to "translate" the JSON string into a "raw" string by interpreting the characters that are special to JSON (see e.g. http://json.org). Thus, following the [mcve] guidelines a bit more closely, we could start with:
$ jq . <<< '"X\nY"'
"X\nY"
$ jq -r . <<< '"X\nY"'
XnY
If you check the json.org specification of strings, you'll see this is exactly correct.
So if for some reason you want each occurrence of \
in the JSON string to be replaced by two backslash characters (i.e. JSON: "\\"
), you could use sub
or gsub
. That's a bit tricky, because the first argument of these functions is a regex. Behold:
$ jq -r 'gsub("\\"; "\\")' <<< '"X\nY"'
X\nY
add a comment |
up vote
0
down vote
Using the -r option tells jq to "translate" the JSON string into a "raw" string by interpreting the characters that are special to JSON (see e.g. http://json.org). Thus, following the [mcve] guidelines a bit more closely, we could start with:
$ jq . <<< '"X\nY"'
"X\nY"
$ jq -r . <<< '"X\nY"'
XnY
If you check the json.org specification of strings, you'll see this is exactly correct.
So if for some reason you want each occurrence of \
in the JSON string to be replaced by two backslash characters (i.e. JSON: "\\"
), you could use sub
or gsub
. That's a bit tricky, because the first argument of these functions is a regex. Behold:
$ jq -r 'gsub("\\"; "\\")' <<< '"X\nY"'
X\nY
add a comment |
up vote
0
down vote
up vote
0
down vote
Using the -r option tells jq to "translate" the JSON string into a "raw" string by interpreting the characters that are special to JSON (see e.g. http://json.org). Thus, following the [mcve] guidelines a bit more closely, we could start with:
$ jq . <<< '"X\nY"'
"X\nY"
$ jq -r . <<< '"X\nY"'
XnY
If you check the json.org specification of strings, you'll see this is exactly correct.
So if for some reason you want each occurrence of \
in the JSON string to be replaced by two backslash characters (i.e. JSON: "\\"
), you could use sub
or gsub
. That's a bit tricky, because the first argument of these functions is a regex. Behold:
$ jq -r 'gsub("\\"; "\\")' <<< '"X\nY"'
X\nY
Using the -r option tells jq to "translate" the JSON string into a "raw" string by interpreting the characters that are special to JSON (see e.g. http://json.org). Thus, following the [mcve] guidelines a bit more closely, we could start with:
$ jq . <<< '"X\nY"'
"X\nY"
$ jq -r . <<< '"X\nY"'
XnY
If you check the json.org specification of strings, you'll see this is exactly correct.
So if for some reason you want each occurrence of \
in the JSON string to be replaced by two backslash characters (i.e. JSON: "\\"
), you could use sub
or gsub
. That's a bit tricky, because the first argument of these functions is a regex. Behold:
$ jq -r 'gsub("\\"; "\\")' <<< '"X\nY"'
X\nY
answered Nov 22 at 16:45
peak
29.7k83955
29.7k83955
add a comment |
add a comment |
up vote
0
down vote
You should output the string as json to preserve the escapes. By taking a string and outputting it raw, you're getting exactly what that string was, a literal backslash followed by an n
.
$ ... | jq -r '.env_vars | to_entries | "(.key): (.value | tojson)"'
If any of the values are non-strings, add a tostring
to the filter.
add a comment |
up vote
0
down vote
You should output the string as json to preserve the escapes. By taking a string and outputting it raw, you're getting exactly what that string was, a literal backslash followed by an n
.
$ ... | jq -r '.env_vars | to_entries | "(.key): (.value | tojson)"'
If any of the values are non-strings, add a tostring
to the filter.
add a comment |
up vote
0
down vote
up vote
0
down vote
You should output the string as json to preserve the escapes. By taking a string and outputting it raw, you're getting exactly what that string was, a literal backslash followed by an n
.
$ ... | jq -r '.env_vars | to_entries | "(.key): (.value | tojson)"'
If any of the values are non-strings, add a tostring
to the filter.
You should output the string as json to preserve the escapes. By taking a string and outputting it raw, you're getting exactly what that string was, a literal backslash followed by an n
.
$ ... | jq -r '.env_vars | to_entries | "(.key): (.value | tojson)"'
If any of the values are non-strings, add a tostring
to the filter.
answered Nov 22 at 19:50
Jeff Mercado
90.2k18182210
90.2k18182210
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53434630%2fjq-double-backslash-sometime-removed%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown