如何在python中将json文件转换为csv文件

khbbv19g  于 2023-02-28  发布在  Python
关注(0)|答案(3)|浏览(138)

我有一个包含对象列表的json文件

[ {
    "infos": [
      { "localisation": "Kassel" },
      { "date": "01.08.2023" },
      { "places": "1 freier Platz" }
    ],

    "applying email": "exemple@starke.ma",
    "additional infos": { 
       "name": "jhon", 
       "position": "RH", 
       "email": "email@email.com" }
  },
  {
    "infos": [
      { "places": "1 freier Platz" }
    ],
    "applying email": "",
    "applying link": "www.exemple.com",
    "additional infos": {
       "name": "jhon", 
       "position": "RH", 
       "email": "email@email.com"
    }
  },]

我想把它转换成csv文件(该对象包含其他字段,但我想使尽可能简单)问题是,该文件包含嵌套对象和嵌套对象中的一些字段从列表中的其他对象中丢失,如您在信息字段中所看到的(在列表的第一个项目中,您可以在信息字段下看到本地化字段,但在列表的第二个对象中缺少),我想要实现的是,我的csv文件头将包含所有字段(也包括丢失的字段),如果在向JSON对象追加数据时没有找到丢失的字段,我想要忽略它并让该位置为空

7rtdyuoh

7rtdyuoh1#

我更喜欢用DataFrame.to_csv保存到CSV,Pandas也有一个json_normalize方法,这可能是最短的方法来扁平化它,但我不太确定如何处理infos列表。
但是,如果将JSON解析为python字典列表(pData

import json
jData = '''
[ { "infos": [{ "localisation": "Kassel" }, { "date": "01.08.2023" }, { "places": "1 freier Platz" }],
    "applying email": "exemple@starke.ma",
    "additional infos": {"name": "jhon", "position": "RH", "email": "email@email.com" }  },
  { "infos": [{ "places": "1 freier Platz" }],
    "applying email": "", "applying link": "www.exemple.com",
    "additional infos": {"name": "jhon", "position": "RH", "email": "email@email.com"} }] 
''' ## I removed the last comma bc it was causing error when parsing

pData = json.loads(jData)

然后,在转换为Pandas Dataframe 并另存为CSV之前,您可以使用flattenObj函数(view examples)将其扁平化:

import pandas as pd
csv_path = 'x.csv' ## path/name of csv file to save to

# pd.DataFrame([flattenObj(d, kSep=' > ') for d in pData]).to_csv(csv_path, index=False)
df = pd.DataFrame([flattenObj(d, kSep=' > ') for d in pData])
df.to_csv(csv_path, index=False)
lvjbypge

lvjbypge2#

Python有一个叫“csv”的模块,它有阅读CSV文件的方法,你可以使用csv.DictReader()方法将JSON文件读入CSV文件,该方法接受JSON对象,将其转换为csv文件,并返回一个reader对象,该对象可用于迭代生成的csv文件的行。

vyswwuz2

vyswwuz23#

我在最近的一个项目中遇到了类似的问题。我使用了内置的csv模块

def generate_csv(records):
field_names = ['Ticker', 'Quantity', 'Cost Per Share',         "Date"]
with open('positions.csv', 'w') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=field_names)
    writer.writeheader()
    writer.writerows(records)

这里假设你已经有了你需要的格式的数据,在我的例子中,我传递给函数的字典列表。2它一次读一个字典,根据field_names中定义的键名把每条记录放到相应的行中。
我是个新手,所以我可能是以一种非常低效的方式做的,但它对我很有效。

相关问题