我需要使用python将一个复杂的json文件转换为csv,我尝试了很多代码都没有成功,我来这里寻求帮助,我更新了问题,json文件大约有一百万,我需要将它们转换为csv格式
csv文件
{
"_id": {
"$oid": "2e3230"
},
"add": {
"address1": {
"address": "kvartira 14",
"zipcode": "10005",
},
"name": "Evgiya Kovava",
"address2": {
"country": "US",
"country_name": "NY",
}
}
}
{
"_id": {
"$oid": "2d118c8bo"
},
"add": {
"address1": {
"address": "kvartira 14",
"zipcode": "52805",
},
"name": "Eiya tceva",
"address2": {
"country": "US",
"country_name": "TX",
}
}
}
import pandas as pd
null = 'null'
data = {
"_id": {
"$oid": "2e3230s314i5dc07e118c8bo"
},
"add": {
"address": {
"address_type": "Door",
"address": "kvartira 14",
"city": "new york",
"region": null,
"zipcode": "10005",
},
"name": "Evgeniya Kovantceva",
"type": "Private person",
"code": null,
"additional_phone_nums": null,
"email": null,
"notifications": [],
"address": {
"address": "kvartira 14",
"city": "new york",
"region": null,
"zipcode": "10005",
"country": "US",
"country_name": "NY",
}
}
}
df = pd.json_normalize(data)
df.to_csv('yourpath.csv')
注意空值。"address"嵌套字典出现在"add"两次几乎相同?
编辑
好了,在你的信息之后,看起来json.JSONDecoder()是你需要的。
最初由@pschill在这个链接上发布:如何分析没有逗号分隔的json对象(最好在Python中)
我在你的数据上尝试了他的代码:
import json
import pandas as pd
data = """{
"_id": {
"$oid": "2e3230"
},
"add": {
"address1": {
"address": "kvartira 14",
"zipcode": "10005"
},
"name": "Evgiya Kovava",
"address2": {
"country": "US",
"country_name": "NY"
}
}
}
{
"_id": {
"$oid": "2d118c8bo"
},
"add": {
"address1": {
"address": "kvartira 14",
"zipcode": "52805"
},
"name": "Eiya tceva",
"address2": {
"country": "US",
"country_name": "TX"
}
}
}"""
请记住,您的数据也有尾随逗号这使得数据不可读(每个右括号前的最后一个逗号)。
你必须用一些正则表达式或另一种我不熟悉的方法来删除它们。为了回答这个问题,我手动删除了它们。
之后我尝试了这个:
content = data
parsed_values = []
decoder = json.JSONDecoder()
while content:
value, new_start = decoder.raw_decode(content)
content = content[new_start:].strip()
# You can handle the value directly in this loop:
# print("Parsed:", value)
# Or you can store it in a container and use it later:
parsed_values.append(value)
给了我一个错误,但列表似乎填充了所有的值:
parsed_values
[{'_id': {'$oid': '2e3230'},
'add': {'address1': {'address': 'kvartira 14', 'zipcode': '10005'},
'name': 'Evgiya Kovava',
'address2': {'country': 'US', 'country_name': 'NY'}}},
{'_id': {'$oid': '2d118c8bo'},
'add': {'address1': {'address': 'kvartira 14', 'zipcode': '52805'},
'name': 'Eiya tceva',
'address2': {'country': 'US', 'country_name': 'TX'}}}]
接下来我做了:
df = pd.json_normalize(parsed_values)
可以正常工作。你可以用:
将其保存为csv格式df.to_csv('yourpath.csv')
告诉我这是否有帮助。
你的json毕竟是相当有问题的。重复的键(问题),空值(不可读),后面的逗号(不可读),没有逗号分隔的字典…一开始并没有引起注意:P