23 votes

Concat 2 champs JSON à l'aide de jq

Je suis l'aide d' jq à la réforme de la ma JSON.

Chaîne JSON:

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

Voulais 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 obtenir mon résultat à l'aide de SEULEMENT jq?

28voto

Anthony Battaglia Points 764

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

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

12voto

jq170727 Points 4461

Voici une solution qui utilise la chaîne d'interpolation comme Jeff l'a 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"
}

Chaîne d'interpolation fonctionne avec l' \(foo) de la syntaxe (qui est semblable à une coquille $(foo) appel).
Voir l'officiel JQ manuel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X