Concat 2 поля в JSON с использованием jq
Я использую jq
реформирование мой JSON
.
строка JSON:
{"channel": "youtube", "profile_type": "video", "member_key": "hello"}
хотел выход:
{"channel" : "profile_type.youtube"}
мои команды:
echo '{"channel": "youtube", "profile_type": "video", "member_key": "hello"}' | jq -c '. | {channel: .profile_type + "." + .member_key}'
Я знаю, что команда ниже объединяет строку. Но это не работает в той же логике, что и выше:
echo '{"channel": "youtube", "profile_type": "video", "member_key": "hello"}' | jq -c '.profile_type + "." + .member_key'
как я могу достичь своего результата, используя только jq?
2 ответов
используйте круглые скобки вокруг кода конкатенации строк:
echo '{"channel": "youtube", "profile_type": "video", "member_key": "hello"}' | jq '{channel: (.profile_type + "." + .channel)}'
вот решение, которое использует строковую интерполяцию как Джефф предлагается:
{channel: "\(.profile_type).\(.member_key)"}
например
$ jq '{channel: "\(.profile_type).\(.member_key)"}' <<EOF
> {"channel": "youtube", "profile_type": "video", "member_key": "hello"}
> EOF
{
"channel": "video.hello"
}
интерполяция строк работает с \(foo)
синтаксис (который похож на снаряд $(foo)
звонок).
См. официальный руководство JQ.