首页 > 解决方案 > 使用 Python 脚本将 JSON 文件转换为新的 CSV 文件

问题描述

我正在尝试将 JSON 数据转换为 CSV 格式,以便将其导入 LibreCalc。我找到了一个非常简单的 Python 脚本,它几乎可以满足我的要求,但它不能正常工作。

这是我制作的脚本,取自指南链接中的代码片段。编辑:我无法添加链接,因为堆栈溢出认为它是垃圾邮件。

import json
import csv

#read file
with open('test.json', 'r') as jsonfile:
  data=jsonfile.read()

# parse file
jsonobj = json.loads(data)

def jsontocsv(input_json, output_path):
  keylist = []
  for key in jsonobj[0]:
    keylist.append(key)
    f = csv.writer(open(output_path, "w"))
    f.writerow(keylist)

  for record in jsonobj:
    currentrecord = []
    for key in keylist:
      currentrecord.append(record[key])
      f.writerow(currentrecord)



jsontocsv(jsonobj,'test.csv')

这是测试 JSON 数据,也取自链接示例。

[{
"Name" : "Bob",
"City" : "San Diego",
"State" : "CA"
},
{
"Name" : "Sue",
"City" : "San Francisco",
"State" : "CA"
},
{
"Name" : "Ted",
"City" : "New York",
"State" : "NY"
},
{
"Name" : "Joe",
"City" : "Miami",
"State" : "FL"
}]

当我运行脚本时,而不是获取如下所示的 CSV 文件:

Name,City,State
Bob,San Diego,CA
Sue,San Francisco,CA
Ted,New York,NY
Joe,Miami,FL

我明白这个...

City,State,Name
San Diego
San Diego,CA
San Diego,CA,Bob
San Francisco
San Francisco,CA
San Francisco,CA,Sue
New York
New York,NY
New York,NY,Ted
Miami
Miami,FL
Miami,FL,Joe

我实际上是在复制这些人的代码并按照他的示例进行操作,所以我不确定自己做错了什么。我已经尝试过使用它并更改缩进等,但似乎没有任何效果。我敢肯定这是非常简单的事情,毫无疑问是我搞砸了,但我无法弄清楚。

将我自己的 JSON 文件与我要转换的实际数据一起使用具有相同的效果。

对此的任何帮助将不胜感激。

谢谢你。

标签: pythonjsoncsv

解决方案


pandas是一个快速简便的选择:

  • 给定显示的数据,在文件名中test.json
  • 将其加载到pandas.DataFrame
  • 将其保存为csv格式df.to_csv
import pandas as pd

df = pd.read_json('test.json')

df.to_csv('test.csv', index=False)

数据框:

在此处输入图像描述

保存的csv文件:

Name,City,State
Bob,San Diego,CA
Sue,San Francisco,CA
Ted,New York,NY
Joe,Miami,FL

推荐阅读