使用jq的JSON中的Concat 2字段


73

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获得结果?


我想我想用自己的youtube API脚本做完全相同的事情;)
Sridhar Sarnobat

Answers:


99

在字符串串联代码周围使用括号

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

1
考虑使用字符串插值代替,比使用多个字符串串联更清洁。
Jeff Mercado

41

这是如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)语法(类似于Shell$(foo)调用)。
请参阅官方JQ手册

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.