首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用jq重塑JSON,将每个对象展开为多个行

用jq重塑JSON,将每个对象展开为多个行
EN

Stack Overflow用户
提问于 2022-01-21 19:25:51
回答 1查看 109关注 0票数 0

我有一个json格式的简历数据库,我希望对其进行重组,以便每一行对应于给定公司的个人就业记录:

个人,company_name,start_date,end_date

但是,运行以下jq命令

{personid:.personid, company_name: .experience[].company.name, sdate: .experience[].start_date, edate: .experience[].end_date}

生成所有字段的笛卡儿积(3个作业x3个字段)。例如,过去曾在3家不同公司担任过3份工作的人在运行上述jq命令之后如下所示:

代码语言:javascript
复制
{"id":"abc123","companyname":"companyA","sdate":"2020-06","edate":null}
{"id":"abc123","companyname":"companyA","sdate":"2020-06","edate":null}
{"id":"abc123","companyname":"companyA","sdate":"2020-06","edate":"2017-07"}
{"id":"abc123","companyname":"companyA","sdate":"2016-10","edate":null}
{"id":"abc123","companyname":"companyA","sdate":"2016-10","edate":null}
{"id":"abc123","companyname":"companyA","sdate":"2016-10","edate":"2017-07"}
{"id":"abc123","companyname":"companyA","sdate":"2017-05","edate":null}
{"id":"abc123","companyname":"companyA","sdate":"2017-05","edate":null}
{"id":"abc123","companyname":"companyA","sdate":"2017-05","edate":"2017-07"}

CompanyB和CompanyC各有9个条目,但为了简洁起见,我截断了上面的输出。

我想我需要使用group_by()命令,但是我没有成功。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-01-21 19:38:08

在没有看到原始数据的情况下,我猜您得到了笛卡尔积,因为您在对象构造中迭代了三次(.experience[])。您可能想要取出迭代,或者将其保存在一个变量中,然后引用它:

代码语言:javascript
复制
.experience[] as $experience | {
  personid: .personid,
  company_name: $experience.company.name,
  sdate: $experience.start_date,
  edate: $experience.end_date
}

取决于建筑的外部结构,反过来也可能是合适的。将.person字段存储在变量中:

代码语言:javascript
复制
.personid as $id | .experience[] | {
  personid: $id,
  company_name: .company.name,
  sdate: .start_date,
  edate: .end_date
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70806656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档