首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何转换-> json?

如何转换-> json?
EN

Unix & Linux用户
提问于 2022-01-20 04:17:41
回答 1查看 257关注 0票数 -2
代码语言:javascript
复制
C-11^Mark^Docking AWS
C-12^Mark^Docking AWS
C-13^Lay^Ploting
C-14^Lay^Ploting
C-15^Lay^Ploting
C-16^Vincent^GPU Calc
C-17^Vincent^GPU Calc
C-18^Vincent^GPU Calc
C-19^Vincent^GPU Calc

我使用以下命令:

代码语言:javascript
复制
jq -Rn '
    [inputs | select(. != "") / "^"]
    | reduce .[] as [$container, $user, $job] ({};
      .[$job] += [{$user, $container}]
    )
    'test.csv > test.json

我想要这个格式的数据

代码语言:javascript
复制
{
  "job": "Docking AWS",
  "user": "Mark",
  "container": [
    "C-11",
    "C-12"
 ]
}

。。。

我怎样才能做到这一点?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-01-20 07:53:17

这个问题最初是对另一个问题的调整,我提供了回答。我还谈到了调整后的问题。

我想出的shell代码如下:

代码语言:javascript
复制
jq -Rn '
    reduce ( inputs / "^" ) as [$container,$user,$job] ({}; 
        .[$job] |= ( .job       |=   $job  |
                     .user      |=   $user |
                     .container += [ $container ] )
    ) | [ .[] ]' file

这使用reduce将对象创建为顶层对象中的子对象,每个对象都按作业字符串键。当以这种方式处理所有数据时,子对象将展开为顶级数组。

给定问题中的数据,这将生成以下JSON文档:

代码语言:javascript
复制
[
  {
    "job": "Docking AWS",
    "user": "Mark",
    "container": [
      "C-11",
      "C-12"
    ]
  },
  {
    "job": "Ploting",
    "user": "Lay",
    "container": [
      "C-13",
      "C-14",
      "C-15"
    ]
  },
  {
    "job": "GPU Calc",
    "user": "Vincent",
    "container": [
      "C-16",
      "C-17",
      "C-18",
      "C-19"
    ]
  }
]
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/687141

复制
相关文章

相似问题

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