首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jq将带有数组的tsv转换为JSON

使用jq将带有数组的tsv转换为JSON
EN

Stack Overflow用户
提问于 2018-08-20 18:50:42
回答 2查看 2.5K关注 0票数 4

我发现jq在将tsv转换为JSON文件时非常有帮助,然而,当我的tsv中有数组时,我想知道如何使用jq来做这件事:

代码语言:javascript
复制
name    age    pets
Tim    15    cats,dogs
Joe    11    rabbits,birds
...

理想的JSON:

代码语言:javascript
复制
[
 {
  name: "Tim",
  age: "15",
  pet:["cats","dogs"]
 },
  name: "Joe",
  age: "11",
  pet:["rabbits","birds"]
 }, ...
]

这是我尝试过的命令:

代码语言:javascript
复制
cat file.tsv | jq -s  --slurp --raw-input --raw-output 'split("\n") | .[1:-1] | map(split("\t")) |
        map({"name": .[0],
             "age": .[1],
             "pet": .[2]})'

上面命令的输出是:

代码语言:javascript
复制
[
 {
  name: "Tim",
  age: "15",
  pet:"cats,dogs"
 },
  name: "Joe",
  age: "11",
  pet:"rabbits,birds"-
 }, ...
]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-20 21:36:56

如果名称包含任何逗号,我将使用以下内容,这也避免了必须“吞咽”输入:

代码语言:javascript
复制
inputs
| split("\t")
| {name: .[0], age: .[1], pet: .[2]}
| .pet |= split(",") 

要跳过标头,只需使用-R选项调用jq,例如:

代码语言:javascript
复制
jq -R -f program.jq input.tsv

如果您希望结果为数组,只需将上面的整个过滤器括在方括号中即可。

票数 3
EN

Stack Overflow用户

发布于 2018-08-20 19:31:52

如下所示:

代码语言:javascript
复制
jq -rRs 'split("\n")[1:-1] |
         map([split("\t")[]|split(",")] | {
                 "name":.[0],
                 "age":.[1],
                 "pet":.[2]
             }
    )' input.tsv
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51929141

复制
相关文章

相似问题

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