Ich benutze, jq
um meine neu zu formatieren JSON
.
JSON-Zeichenfolge:
{"channel": "youtube", "profile_type": "video", "member_key": "hello"}
Gewünschte Ausgabe:
{"channel" : "profile_type.youtube"}
Mein Befehl:
echo '{"channel": "youtube", "profile_type": "video", "member_key": "hello"}' | jq -c '. | {channel: .profile_type + "." + .member_key}'
Ich weiß, dass der folgende Befehl die Zeichenfolge verkettet. Aber es funktioniert nicht in der gleichen Logik wie oben:
echo '{"channel": "youtube", "profile_type": "video", "member_key": "hello"}' | jq -c '.profile_type + "." + .member_key'
Wie kann ich mein Ergebnis mit NUR jq erzielen?
Antworten:
Verwenden Sie Klammern um den String-Verkettungscode:
echo '{"channel": "youtube", "profile_type": "video", "member_key": "hello"}' \ | jq '{channel: (.profile_type + "." + .channel)}'
quelle
Hier ist eine Lösung, die die von Jeff vorgeschlagene Zeichenfolgeninterpolation verwendet :
{channel: "\(.profile_type).\(.member_key)"}
z.B
$ jq '{channel: "\(.profile_type).\(.member_key)"}' <<EOF > {"channel": "youtube", "profile_type": "video", "member_key": "hello"} > EOF { "channel": "video.hello" }
Die String-Interpolation funktioniert mit der
\(foo)
Syntax (ähnlich einem Shell-$(foo)
Aufruf).Siehe das offizielle JQ-Handbuch .
quelle