首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用jq创建转换后的嵌套JSON元素?

如何使用jq创建转换后的嵌套JSON元素?
EN

Stack Overflow用户
提问于 2019-07-10 17:13:52
回答 1查看 75关注 0票数 1

我有一个包含嵌套元素的JSON文件,我正试图将其操作为一个未嵌套的JSON文件。我该怎么做呢?

使用js,我尝试分离百分比,这是我能够做到的。我不知道如何重命名百分比字段。我见过一些实例,看起来value.gender或value.grade应该可以工作,但我也不确定如何组合它们。

代码语言:javascript
复制
jq '.data[] | .id as $id | (.demographics[] | .percentage as $percentage | .gender as $gender | .grade as $grade | {"id":$id, "percentage":$percentage})' test2.json

在这里,我希望能够将percentage字段重命名为性别和成绩值。然后我想按id分组。

以下是原始JSON文件(test2.json):

代码语言:javascript
复制
{
   "data": [{
         "id": "abc",
         "students": "elementary",
         "demographics": [{
               "grade": "K-2",
               "percentage": "0.1",
               "gender": "unspecified"
            },
            {
               "grade": "K-2",
               "gender": "male",
               "percentage": "0.5"
            },
            {
               "gender": "female",
               "percentage": "0.4",
               "grade": "K-2"
            },
            {
               "grade": "3-6",
               "percentage": "0.3",
               "gender": "male"
            },
            {
               "percentage": "0.2",
               "gender": "unspecified",
               "grade": "3-6"
            },
            {
               "grade": "3-6",
               "gender": "female",
               "percentage": "0.5"
            }
         ],

         "neighborhood_name": [{
               "percentage": "0.5",
               "neighborhood": "atwood"
            },
            {
               "region": "bluff",
               "percentage": "0.5"
            }
         ]
      },
      {
         "id": "def",
         "students": "midhigh",
         "demographics": [{
               "grade": "7-9",
               "percentage": "0.2",
               "gender": "unspecified"
            },
            {
               "grade": "7-9",
               "gender": "male",
               "percentage": "0.2"
            },
            {
               "gender": "female",
               "percentage": "0.6",
               "grade": "7-9"
            },
            {
               "grade": "10-12",
               "percentage": "0.1",
               "gender": "male"
            },
            {
               "percentage": "0.1",
               "gender": "unspecified",
               "grade": "10-12"
            },
            {
               "grade": "10-12",
               "gender": "female",
               "percentage": "0.8"
            }
         ],

         "neighborhood_name": [{
               "percentage": "0.2",
               "neighborhood": "atwood"
            },
            {
               "region": "bluff",
               "percentage": "0.8"
            }
         ]

      }
   ]
}

以下是我所期望的:

代码语言:javascript
复制
{
         "id": "abc",
         "students": "elementary",
         "demo_K-2_unspecified": "0.1",
         "demo_K-2_male": "0.5",
         "demo_K-2_female": "0.4",
         "demo_3-6_male": "0.3",
         "demo_3-6_unspecified": "0.6",
         "demo_3-6_female": "0.5",
            },
      {
         "id": "def",
         "students": "midhigh",
         "demo_7-9_unspecified": "0.2",
         "demo_7-9_male": "0.2",
         "demo_7-9_female": "0.6",
         "demo_10-12_male": "0.1",
         "demo_10-12_unspecified": "0.1",
         "demo_10-12_female": "0.8",

      }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-10 19:45:15

对于示例数据,以下筛选器将生成所需的输出:

代码语言:javascript
复制
.data[]
| {id, students} as $ix
| .demographics
| map( {"demo_\(.grade)_\(.gender)": .percentage} )
| $ix + add

这里的主要思想是使用map创建键-值对的列表,这样就可以使用add轻松地创建复合对象。

作为一行程序

代码语言:javascript
复制
jq '.data[] | {id,students} + (.demographics | map( {"demo_\(.grade)_\(.gender)": .percentage} ) | add)' test2.json
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56967351

复制
相关文章

相似问题

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