新手希望学习嵌套的JSON

时间:2016-06-30 15:37:09

标签: arrays json csv nested

我刚开始学习JSON以及如何在不同文件类型之间来回转换。

如果我正在尝试将CS​​V文件转换为JSON

说我是否有人的CSV文件

(First name, Last name, age)
David Chin 40
David Lin 40
David Ping 30
Sandra Lee 25
Sandra Long 45

我可以将其转换为JSON而不进行任何格式化。

我如何尝试将CS​​V转换为嵌套的JSON?

希望输出看起来像

{"David":{
    "Chin": "40"
     "Lin": "40"
     "Ping": "30"
},
"Sandra":{
        "Lee": "25"
        "Long": "45"}

}

是否有任何特定的代码可以自由格式化转换?

对于正确方向的任何帮助都表示赞赏,或者有关如何格式化JSON的指示也可以使用。我只是不知道我会在哪里操作以在输出中获得该格式。

1 个答案:

答案 0 :(得分:0)

以下是使用jq

的解决方案

如果文件filter.jq包含

[
  split("\n")                                # split string into lines
| [.[0]    | split(",")[]] as $headers       # split header
| (.[1:][] | split(","))                     # split data
| select(length>0)                           # eliminate blanks
| [   [ $headers, . ]                        # 
    | transpose[]                            # assemble objects
    | {key:.[0], value:.[1]}                 # from keys and values
  ] | from_entries                           #
]
| reduce group_by(.First)[][] as $r (        # construct final result
    {}
  ; .[$r.First] = (.[$r.First]//{}) * {($r.Last):$r.Age}
  )    

data包含

First,Last,Age
David,Chin,40
David,Lin,40
David,Ping,30
Sandra,Lee,25
Sandra,Long,45

然后命令

jq -M -R -s -r -f filter.jq data

将产生输出

{
  "David": {
    "Chin": "40",
    "Lin": "40",
    "Ping": "30"
  },
  "Sandra": {
    "Lee": "25",
    "Long": "45"
  }
}