如何使用JQ打印任意字符串?

5
我可以帮您翻译成中文。这段内容与编程有关,讲述了如何使用JQ打印任意组合的字符串。假设您有一个以下格式的json文档:
[{
  "first_name": "Angela",
  "last_name": "Sleney",
  "email": "asleney0@nytimes.com"
}, {
  "first_name": "Clint",
  "last_name": "Ducroe",
  "email": "cducroe1@aboutads.info"
}, {
  "first_name": "Aurthur",
  "last_name": "Tebb",
  "email": "atebb2@fastcompany.com"
}]

假设我们已经有了相关数据(可以是任何字符串),我想用JQ打印出以下3行:

Email address for user Angela Sleney is "asleney0@nytimes.com"
Email address for user Clint Ducroe is "cducroe1@aboutads.info"
Email address for user Aurthur Tebb is "atebb2@fastcompany.com"

我该怎么做?


我能做到的最好的事情是使用以下方式每行打印1个数据:

jq -r '.[] | .first_name, .last_name, .email, ""'

但结果是

Angela
Sleney
asleney0@nytimes.com

Clint
Ducroe
cducroe1@aboutads.info

Aurthur
Tebb
atebb2@fastcompany.com

*注意:数据来自随机生成器,没有真实姓名或电子邮件。

可能是重复问题: https://dev59.com/4lkS5IYBdhLWcg3wFi0M - JohnnyJS
不是重复的,但仍然很有趣,谢谢。 - Gruber
2个回答

9
我在 jqplay上尝试使用您的json进行操作。
我得到了期望的结果 -
Email address for user Angela Sleney is "asleney0@nytimes.com"
Email address for user Clint Ducroe is "cducroe1@aboutads.info"
Email address for user Aurthur Tebb is "atebb2@fastcompany.com"

使用这个过滤器 -
.[] | "Email address for user \(.first_name) \(.last_name) is \"\(.email)\""

玩弄字符串插值(foo)以获得您的结果。


1
你写单引号的方式并不是必须的,你可以直接使用:'\(.email)',但是双引号似乎更受欢迎:\"\(.email)\" - Jeff Mercado
我知道我错过了一个简单的功能,我非常惊讶像我这样的普通请求居然没有被程序解决。RTFM再次发威,我在文档中完全忽略了它。谢谢! - Gruber

0
尝试这个:
jq -r '.[] | .first_name + " " + .last_name + " " + .email'
附加说明:+
运算符+需要两个过滤器:
将它们都应用于相同的输入
将结果相加。
这里的“添加”一词根据所涉及的类型有不同的含义:
  • 数字通过常规算术相加。
  • 数组通过连接彼此形成一个更大的数组来相加。
  • 字符串通过附加一个字符串到另一个字符串来形成一个更大的字符串。

请参阅此处以获取更多详细信息:

来源:https://stedolan.github.io/jq/manual/#Builtinoperatorsandfunctions


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接