I am using jq to reformat my JSON.
JSON String:
{"channel": "youtube", "profile_type": "video", "member_key": "hello"}
Wanted output:
{"channel" : "profile_type.youtube"}
My command:
echo '{"channel": "youtube", "profile_type": "video", "member_key": "hello"}' | jq -c '. | {channel: .profile_type + "." + .member_key}'
I know that the command below concatenates the string. But it is not working in the same logic as above:
echo '{"channel": "youtube", "profile_type": "video", "member_key": "hello"}' | jq -c '.profile_type + "." + .member_key'
How can I achieve my result using ONLY jq?
12 Answers
Use parentheses around the string concatenation code:
echo '{"channel": "youtube", "profile_type": "video", "member_key": "hello"}' \ | jq '{channel: (.profile_type + "." + .channel)}' 1Here is a solution that uses string interpolation as Jeff suggested:
{channel: "\(.profile_type).\(.member_key)"} e.g.
$ jq '{channel: "\(.profile_type).\(.member_key)"}' <<EOF > {"channel": "youtube", "profile_type": "video", "member_key": "hello"} > EOF { "channel": "video.hello" } String interpolation works with the \(foo) syntax (which is similar to a shell $(foo) call).
See the official JQ manual.