将JSON转换为CSV

时间:2015-10-05 12:24:29

标签: json csv

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

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

是否有另一种方法可以动态地将列添加到CSV文件中?

1 个答案:

答案 0 :(得分:0)

一种方法是使用jq(“Json Query”):

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