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.