【发布时间】:2018-09-25 18:06:56
【问题描述】:
我正在尝试改变
{
"login": "username",
"emails": [
"email_1@example.com",
"email_2@example.com"
]
}
进入
[
{
"email": "email_1@example.com",
"login": "username"
},
{
"email": "email_2@example.com",
"login": "username"
}
]
但是,对于我的一生,我无法弄清楚如何。我查看了 jq 的 map 和 reduce 功能,但我的语法一定是不正确的。
如果你们能提供任何帮助,我将不胜感激。谢谢!
编辑
感谢所有回复的人。正如您可能已经猜到的那样,这是更大转型的核心问题。我实际上在一个目录中处理大约 752 个单独的 JSON 文件,每个文件都有一个相似的对象。我想将它们全部转换为一组登录名和电子邮件。感谢@peak的回答,我设法创建了以下内容:
jq -s '.[] | {login, email: .emails[]?}' *.json | jq -s 'map(select(true))'
请注意,我将.emails[] 更改为.emails[]? 是为了说明.emails 的某些值可能是null。
【问题讨论】:
-
您的解决方案(在编辑中)似乎不必要地复杂且效率低下。
jq FILTER *.json | jq -s .之类的东西应该是可能的,其中 FILTER 产生一个对象流。 -
嗨@peak,谢谢!我对
jq还很陌生,还在学习。