首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jq:根据两个键嵌套对象

jq:根据两个键嵌套对象
EN

Stack Overflow用户
提问于 2022-02-07 20:45:08
回答 1查看 30关注 0票数 0

这里是我的文件:

代码语言:javascript
复制
{
   "name":"name1",
   "oid1":"oid1-1",
   "oid2":"oid2-1"
}{
   "name":"name2",
   "oid1":"oid1-2",
   "oid2":"oid2-2"
}

另一方:

代码语言:javascript
复制
{
  "id": "id1",
  "info": "info1",
  "oid1":"oid1-1",
  "oid2":"oid2-1"
}
{
  "id": "id2",
  "info": "info2",
  "oid1":"oid1-1",
  "oid2":"oid2-1"
}
{
  "id": "id3",
  "info": "info3",
  "oid1":"oid1-2",
  "oid2":"oid2-2"
}

我需要将上面的文件嵌套到第一批文件中:

代码语言:javascript
复制
{
   "name":"name1",
   "oid1":"oid1-1",
   "oid2":"oid2-1",
   "ids":[
      {
         "id":"id1",
         "info":"info1"
      },
      {
         "id":"id2",
         "info":"info2"
      }
   ]
}{
   "name":"name2",
   "oid1":"oid1-2",
   "oid2":"oid2-2",
   "ids":[
      {
         "id":"id3",
         "info":"info3"
      }
   ]
}

因此,我需要嵌套到第一个文档中,哪些文档是parent.oid1 == nest.oid1 && parent.oid2 == nest.oid2的。

我没有得到任何合理的东西。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-07 21:00:12

如果“我的文档”存储在一个名为mine.json的文件中,而“另一边”是文件others.json的内容,则对其他文件进行--slurpfile,并根据select添加它们

代码语言:javascript
复制
jq --slurpfile others others.json '
  . as $mine
  | . + {ids: ($others | map(          
    select(.oid1 == $mine.oid1 and .oid2 == $mine.oid2)
    | {id, info}
  ))}
' mine.json
代码语言:javascript
复制
{
  "name": "name1",
  "oid1": "oid1-1",
  "oid2": "oid2-1",
  "ids": [
    {
      "id": "id1",
      "info": "info1"
    },
    {
      "id": "id2",
      "info": "info2"
    }
  ]
}
{
  "name": "name2",
  "oid1": "oid1-2",
  "oid2": "oid2-2",
  "ids": [
    {
      "id": "id3",
      "info": "info3"
    }
  ]
}

演示 (使用带字段mineothers而不是文件的对象)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71025169

复制
相关文章

相似问题

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