簡體   English   中英

使用數組將帶有數組的tsv轉換為JSON

[英]Converting tsv with arrays to JSON with jq

我發現jq在將tsv轉換為JSON文件中非常有幫助,但是,當我在tsv中有數組時,我想弄清楚如何使用jq進行操作:

name    age    pets
Tim    15    cats,dogs
Joe    11    rabbits,birds
...

理想的JSON:

[
 {
  name: "Tim",
  age: "15",
  pet:["cats","dogs"]
 },
  name: "Joe",
  age: "11",
  pet:["rabbits","birds"]
 }, ...
]

這是我嘗試的命令:

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

上面命令的輸出是:

[
 {
  name: "Tim",
  age: "15",
  pet:"cats,dogs"
 },
  name: "Joe",
  age: "11",
  pet:"rabbits,birds"-
 }, ...
]

像這樣:

jq -rRs 'split("\n")[1:-1] |
         map([split("\t")[]|split(",")] | {
                 "name":.[0],
                 "age":.[1],
                 "pet":.[2]
             }
    )' input.tsv

如果名稱中包含任何逗號,我將使用以下內容,這也避免了“輸入”輸入:

inputs
| split("\t")
| {name: .[0], age: .[1], pet: .[2]}
| .pet |= split(",") 

要跳過標題,只需使用-R選項調用jq,例如:

jq -R -f program.jq input.tsv

如果要將結果作為數組,只需將上面的整個過濾器括在方括號中即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM