web-dev-qa-db-fra.com

Concat 2 champs en JSON avec jq

J'utilise jq pour reformer mon JSON.

JSON String:

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

Sortie recherchée:

{"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 cela ne fonctionne 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 obtenir mon résultat en utilisant UNIQUEMENT jq?

42
darthsidious

Utilisez des parenthèses autour de votre code de concaténation de chaîne:

echo '{"channel": "youtube", "profile_type": "video", "member_key": "hello"}' | jq '{channel: (.profile_type + "." + .channel)}'
48

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

{channel: "\(.profile_type).\(.member_key)"}

par exemple.

$ jq '{channel: "\(.profile_type).\(.member_key)"}' <<EOF
> {"channel": "youtube", "profile_type": "video", "member_key": "hello"}
> EOF
{
  "channel": "video.hello"
}

L'interpolation de chaîne fonctionne avec la syntaxe \(foo) (similaire à un appel Shell $(foo)).
Voir le document officiel manuel JQ .

26
jq170727