Json 将数组转换为对象中的对象

Json 将数组转换为对象中的对象,json,jq,Json,Jq,我已经为此争论了一段时间,我看了几篇关于这个话题的文章。我似乎无法实现我的目标。我有这个原始的json数据,我想稍微转换一下 基于label.env对对象进行分组(目前仅使用一个env),然后将这些对象从原始json插入到名为projects的对象中 { "prod": { "projects": { "createTime": "2020-06-25T14:16:45.720Z",

我已经为此争论了一段时间,我看了几篇关于这个话题的文章。我似乎无法实现我的目标。我有这个原始的json数据,我想稍微转换一下

基于label.env对对象进行分组(目前仅使用一个env),然后将这些对象从原始json插入到名为projects的对象中

{
  "prod": {
    "projects": {
      "createTime": "2020-06-25T14:16:45.720Z",
      "labels": {
        "cb_domain": "cloud-services",
        "cb_product": "infra",
        "env": "prod",
        "owner": "cloud-server"
      },
      "lifecycleState": "ACTIVE",
      "name": "projectname",
      "parent": {
        "id": "770593713153",
        "type": "folder"
      },
      "projectId": "projectname-324234",
      "projectNumber": "962363417856"
    }
  }
}
{
  "prod": {
    "projects": {
      "createTime": "2020-06-24T19:45:42.851Z",
      "labels": {
        "cb_domain": "cloud-services",
        "cb_product": "ad",
        "env": "prod",
        "owner": "cloud-server"
      },
      "lifecycleState": "ACTIVE",
      "name": "projectname2",
      "parent": {
        "id": "4352564765437",
        "type": "folder"
      },
      "projectId": "projectname2-4567",
      "projectNumber": "3243456324"
    }
  }
}

原始的

{
  "createTime": "2020-06-25T14:16:45.720Z",
  "labels": {
    "cb_domain": "cloud-services",
    "cb_product": "infra",
    "env": "prod",
    "owner": "cloud-server"
  },
  "lifecycleState": "ACTIVE",
  "name": "projectname",
  "parent": {
    "id": "123456577",
    "type": "folder"
  },
  "projectId": "projectname-324234",
  "projectNumber": "962363417856"
}
{
  "createTime": "2020-06-24T19:45:42.851Z",
  "labels": {
    "cb_domain": "cloud-services",
    "cb_product": "ad",
    "env": "prod",
    "owner": "cloud-server"
  },
  "lifecycleState": "ACTIVE",
  "name": "projectname2",
  "parent": {
    "id": "4352564765437",
    "type": "folder"
  },
  "projectId": "projectname2-4567",
  "projectNumber": "3243456324"
}
我正在使用
jq-s'group_by(.labels.env)|.[]|{[0].labels.env:{projects:.[]|.}}
将原始json数据嵌套到按env\projects分组的对象中,这样做很有效,但似乎会复制它,而不是将每个对象放在项目中

{
  "prod": {
    "projects": {
      "createTime": "2020-06-25T14:16:45.720Z",
      "labels": {
        "cb_domain": "cloud-services",
        "cb_product": "infra",
        "env": "prod",
        "owner": "cloud-server"
      },
      "lifecycleState": "ACTIVE",
      "name": "projectname",
      "parent": {
        "id": "770593713153",
        "type": "folder"
      },
      "projectId": "projectname-324234",
      "projectNumber": "962363417856"
    }
  }
}
{
  "prod": {
    "projects": {
      "createTime": "2020-06-24T19:45:42.851Z",
      "labels": {
        "cb_domain": "cloud-services",
        "cb_product": "ad",
        "env": "prod",
        "owner": "cloud-server"
      },
      "lifecycleState": "ACTIVE",
      "name": "projectname2",
      "parent": {
        "id": "4352564765437",
        "type": "folder"
      },
      "projectId": "projectname2-4567",
      "projectNumber": "3243456324"
    }
  }
}

我的目标是

{
  "prod": {
    "projects": {
      "createTime": "2020-06-25T14:16:45.720Z",
      "labels": {
        "cb_domain": "cloud-services",
        "cb_product": "infra",
        "env": "prod",
        "owner": "cloud-server"
      },
      "lifecycleState": "ACTIVE",
      "name": "projectname",
      "parent": {
        "id": "770593713153",
        "type": "folder"
      },
      "projectId": "projectname-324234",
      "projectNumber": "962363417856"
    },
    {
      "createTime": "2020-06-24T19:45:42.851Z",
      "labels": {
        "cb_domain": "cloud-services",
        "cb_product": "ad",
        "env": "prod",
        "owner": "cloud-server"
      },
      "lifecycleState": "ACTIVE",
      "name": "projectname2",
      "parent": {
        "id": "4352564765437",
        "type": "folder"
      },
      "projectId": "projectname2-4567",
      "projectNumber": "3243456324"
    }
  }
}






考虑到Q中的一些细微差异,您的jq计划的以下变体似乎实现了您试图实现的目标:

group_by(.labels.env)
| .[]
| .[0].labels.env as $key
| { ($key) : { projects: . } }

jq
不是
jQuery
。有关更多信息,请阅读该标记的详细信息。您的目标不是有效的json…@Selim关于发布的所需输出是正确的。穆尔达-请修正,这样Q可以被提升。谢谢这项工作,我也想出了这项工作以及<代码>分组依据(.labels.env)|。[]|{([0].labels.env):{projects:map({(.name | tostring:.})| add}