使用 jq 在 JSON 中连接2个字段

我使用 jq来重新格式化我的 JSON

JSON String:

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

I know that the command below concatenates the string. But it is not working in the same logic as above:

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

How can I achieve my result using ONLY jq?

107520 次浏览

在字符串连接代码周围使用 parentheses:

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

下面是按照 杰夫的建议使用字符串插值的解决方案:

{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)语法(类似于 shell $(foo)调用)。
见官方 JQ 手册