思路比较简单,基本就是把list中的每个节点转成DataFrames,然后再通过reduce函数合并成一个DataFrames
using JSON
using DataFrames
json_str = """
[{ "color": "red", "value": "#f00" }, { "color": "green", "value": "#0f0" },
{ "color": "blue", "value": "#00f" }, { "color": "cyan", "value": "#0ff" },
{ "color": "magenta", "value": "#f0f" }, { "color": "yellow", "value": "#ff0" },
{ "color": "black", "value": "#000" } ]
"""
#解析成Vector
a = JSON.Parser.parse(json_str)
# 7-element Array{Any,1}:
# Dict{String,Any}("color"=>"red","value"=>"#f00")
# Dict{String,Any}("color"=>"green","value"=>"#0f0")
# Dict{String,Any}("color"=>"blue","value"=>"#00f")
# Dict{String,Any}("color"=>"cyan","value"=>"#0ff")
# Dict{String,Any}("color"=>"magenta","value"=>"#f0f")
# Dict{String,Any}("color"=>"yellow","value"=>"#ff0")
# Dict{String,Any}("color"=>"black","value"=>"#000")
# 以下几种转换方式
reduce(vcat, DataFrame.(a))
# 7×2 DataFrame
# │ Row │ color │ value │
# │ │ String │ String │
# ├─────┼─────────┼────────┤
# │ 1 │ red │ #f00 │
# │ 2 │ green │ #0f0 │
# │ 3 │ blue │ #00f │
# │ 4 │ cyan │ #0ff │
# │ 5 │ magenta │ #f0f │
# │ 6 │ yellow │ #ff0 │
# │ 7 │ black │ #000 │
vcat(DataFrame.(a)..., cols=:union)
# 7×2 DataFrame
# │ Row │ color │ value │
# │ │ String │ String │
# ├─────┼─────────┼────────┤
# │ 1 │ red │ #f00 │
# │ 2 │ green │ #0f0 │
# │ 3 │ blue │ #00f │
# │ 4 │ cyan │ #0ff │
# │ 5 │ magenta │ #f0f │
# │ 6 │ yellow │ #ff0 │
# │ 7 │ black │ #000 │
reduce(vcat, DataFrame.(a), cols=:union)
# 7×2 DataFrame
# │ Row │ color │ value │
# │ │ String │ String │
# ├─────┼─────────┼────────┤
# │ 1 │ red │ #f00 │
# │ 2 │ green │ #0f0 │
# │ 3 │ blue │ #00f │
# │ 4 │ cyan │ #0ff │
# │ 5 │ magenta │ #f0f │
# │ 6 │ yellow │ #ff0 │
# │ 7 │ black │ #000 │