将损坏的JSON转换为CSV python
我正在尝试获取格式不好的JSON并将其转换为CSV。下面是json的一个示例:将损坏的JSON转换为CSV python,python,json,list,csv,for-loop,Python,Json,List,Csv,For Loop,我正在尝试获取格式不好的JSON并将其转换为CSV。下面是json的一个示例: [ { "fields": [ { "label": "starttime", "field": "starttime", "type": "integer" }, {
[
{
"fields": [
{
"label": "starttime",
"field": "starttime",
"type": "integer"
},
{
"label": "endTime",
"field": "endTime",
"type": "integer"
},
{
"label": "duration",
"field": "duration",
"type": "integer"
},
{
"label": "metrics",
"field": "metrics",
"type": "integer"
},
{
"label": "email",
"field": "email",
"type": "string"
},
]
"results": [
[
15949132375,
15949133139,
763,
7,
"newemail@gmail.com"
],
[
15949132376,
15949133140,
764,
8,
"newemail1@gmail.com"
],
[
15949132377,
15949133141,
765,
9,
"newemail2@gmail.com"
],
[
15949132378,
15949133142,
766,
10,
"newemail3@gmail.com"
],
[
15949132379,
15949133143,
767,
11,
"newemail4@gmail.com"
],
[
15949132380,
15949133144,
768,
12,
"newemail5@gmail.com"
],
[
15949132381,
15949133145,
769,
13,
"newemail6@gmail.com"
],
[
15949132382,
15949133146,
770,
14,
"newemail7@gmail.com"
],
[
15949132383,
15949133147,
771,
15,
"newemail8@gmail.com"
],
]
}
]
这是一个示例,因为结果有几千个条目。我需要尝试将上面的“字段”部分的值作为标题,将“结果”放入这些标题下面的行中,因为它们是与“字段”一起使用的数据
正如我所说的,json没有正确导出,使用键以正确的格式获取json不是一个选项。如何将此数据输入CSV?如果不是CSV,如何将其格式化为正确的JSON,使用“字段”标签作为结果中每个对应行的键
我试着通过熊猫来创建一个df。从每个数据集(字段、标签)和结果创建列表,但无法正确连接它们
请提供帮助?可以读取json文件,并可以使用“re”模块对其进行评估,以分离字段和结果。然后可以将结果写入输出csv文件 建议代码:
import re
import csv
with open("sample.json") as fptr :
fstr = fptr.read()
#jsonStr = eval(fstr)
fields = re.findall ('"fields": (\[.*?\])', fstr, re.M+re.S+re.I)
fields = eval(fields[0])
headers = [ f['label'] for f in fields]
results = re.findall ('"results": (\[.*\]).*}', fstr, re.M+re.S+re.I)
results = eval(results[0])
# print (fields, results, headers)
with open ("output.csv", "w", newline="") as fptr :
recordWrite = csv.writer(fptr, dialect='excel')
recordWrite.writerow(headers)
recordWrite.writerows(results)
注意:查看上面的json,可以使用“eval”而不是“re”来评估整个文件内容。唯一需要的更改是在列表结束和“字段”开始后添加逗号。可以读取json文件,并可以使用“re”模块对其进行评估,以分隔字段和结果。然后可以将结果写入输出csv文件 建议代码:
import re
import csv
with open("sample.json") as fptr :
fstr = fptr.read()
#jsonStr = eval(fstr)
fields = re.findall ('"fields": (\[.*?\])', fstr, re.M+re.S+re.I)
fields = eval(fields[0])
headers = [ f['label'] for f in fields]
results = re.findall ('"results": (\[.*\]).*}', fstr, re.M+re.S+re.I)
results = eval(results[0])
# print (fields, results, headers)
with open ("output.csv", "w", newline="") as fptr :
recordWrite = csv.writer(fptr, dialect='excel')
recordWrite.writerow(headers)
recordWrite.writerows(results)
注意:查看上面的json,可以使用“eval”而不是“re”来评估整个文件内容。唯一需要的更改是在列表结束和“字段”开始后添加逗号。格式设置与此无关。语法和格式无关。语法是