2015-10-05 179 views
0

我正在将大约200 000个Json对象存储到CSV文件中。但问题是任何2个JSON对象可能不同(具有不同的键名称)。将JSON转换为CSV

我想过创建一个HashSet并遍历所有对象,以便获取CSV文件的列名。但是这个过程显然需要太多时间。

是否有另一种动态添加列到CSV文件的方法?

回答

0

一种方法将是使用jq(“类JSON查询”):

def tocsv: 
    if length == 0 then empty 
    else 
    (.[0] | keys_unsorted) as $keys 
    | (map(keys) | add | unique) as $allkeys 
    | ($keys + ($allkeys - $keys)) as $cols 
    | ($cols, (.[] as $row | $cols | map($row[.]))) 
    | @csv 
    end ; 

tocsv 

例如,假定上述的是在一个文件名为json2csv.jq并且该输入是在in.json:

jq -r -f json2csv.jq in.json 

上述程序通过从第一个对象的键名(按它们出现的顺序)开始构造标题行,然后根据需要扩展标题行。

更多关于JQ,看到https://stedolan.github.io/jq

另一种方法是使用in2csv,将csvkit的无线工具包的一部分 - 见https://csvkit.readthedocs.org