Concat 2 champs dans JSON en utilisant jq

j'utilise jq pour la réforme de ma JSON.

JSON String:

{"channel": "youtube", "profile_type": "video", "member_key": "hello"}

Voulu de sortie:

{"channel" : "profile_type.youtube"}

Ma commande:

echo '{"channel": "youtube", "profile_type": "video", "member_key": "hello"}' | jq -c '. | {channel: .profile_type + "." + .member_key}'

je sais que la commande ci-dessous concatène la chaîne. Mais il ne travaille pas dans la même logique que ci-dessus:

echo '{"channel": "youtube", "profile_type": "video", "member_key": "hello"}' | jq -c '.profile_type + "." + .member_key'

Comment puis-je atteindre mon résultat en utilisant seulement jq?

21
demandé sur darthsidious 2016-06-08 21:56:43

2 réponses

Utilisez les parenthèses autour du code de concaténation de la chaîne:

echo '{"channel": "youtube", "profile_type": "video", "member_key": "hello"}' | jq '{channel: (.profile_type + "." + .channel)}'
26
répondu Anthony Battaglia 2016-06-08 19:02:09

Voici une solution qui utilise l'interpolation de chaîne comme Jeff a suggéré:

{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"
}

l'interpolation des chaînes de caractères fonctionne avec \(foo) syntaxe (qui est similaire à un shell $(foo) appel).

Voir l'officiel manuel JQ.

11
répondu jq170727 2018-08-23 05:44:06