web-dev-qa-db-ja.com

jqを使用したJSONの連結2フィールド

私は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のみを使用して結果を得るにはどうすればよいですか?

42
darthsidious

文字列連結コードを括弧で囲みます。

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

Jeff として文字列補間を使用するソリューションは次のとおりです。

{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マニュアル を参照してください。

26
jq170727