我有一个非常大的JSON文件,其中包含多个单独的JSON对象,格式如下所示。我试图将其转换为CSV,以便每行是JSON对象中的外部id / name / alphabet和1组转换的组合:id / name / alphabet。对于单个JSON对象中的所有id / name / alphabet集合重复此操作。因此,从下面的对象中,应该创建2行,其中第一行是(外部)id / name / alphabet和第一个id / name / alphabet of conversion。第二行是(外部)id / name / alphabet,现在是转换的第二个id / name / alphabet。
重要提示是文件中的某些对象可以有超过50/60的转换ID /名称/字母对。
我到目前为止尝试的是首先展平JSON对象,这导致了像conversion_id_0和conversion_id_1等等的密钥...所以我可以将外部映射为常量常量,但我不确定如何映射每个相应的数字集是一个单独的行。
非常感谢任何帮助或见解!
[
{
"alphabet": "ABCDEFGHIJKL",
"conversion": [
{
"alphabet": "BCDEFGHIJKL",
"id": 18589260,
"name": [
"yy"
]
},
{
"alphabet": "EFGHIJEFGHIJ",
"id": 18056632,
"name": [
"zx",
"cd"
]
}
],
"id": 23929934,
"name": [
"x",
"y"
]
}
]
答案 0 :(得分:0)
您的问题不清楚从输入JSON数据到CSV文件行的确切映射,所以我不得不猜测当内部或外部对象有多个“名称”时会发生什么。
无论如何,希望以下内容能够让您大致了解如何解决这些问题。
import csv
objects = [
{
"alphabet": "ABCDEFGHIJKL",
"id": 23929934,
"name": [
"x",
"y"
],
"conversion": [
{
"alphabet": "BCDEFGHIJKL",
"id": 18589260,
"name": [
"yy"
]
},
{
"alphabet": "EFGHIJEFGHIJ",
"id": 18056632,
"name": [
"zx",
"cd"
]
}
],
}
]
with open('converted_json.csv', 'wb') as outfile:
def group(item):
return [item["id"], item["alphabet"], ' '.join(item["name"])]
writer = csv.writer(outfile, quoting=csv.QUOTE_NONNUMERIC)
for obj in objects:
outer = group(obj)
for conversion in obj["conversion"]:
inner = group(conversion)
writer.writerow(outer + inner)
生成的CSV文件的内容:
23929934,"ABCDEFGHIJKL","x y",18589260,"BCDEFGHIJKL","yy"
23929934,"ABCDEFGHIJKL","x y",18056632,"EFGHIJEFGHIJ","zx cd"