免责声明:我是面向对象 Python 的新手。
我的最终目标是一次从许多具有相同结构的 JSON 文件中提取数据,并从数据中计算出新的东西,并将所有这些存储在 MySQL 数据库中。
如何从 JSON 文件中获取数据并输入 Python 中的自定义对象结构?
我需要这样做,因为需要使用读取的每个连续 JSON 文件重新计算统计信息,并且对象的内容可能会根据累积的数据而有所不同。
一般的想法是,每个 JSON 都是一个在两支球队之间进行的足球比赛对象。
一个“比赛”对象包含两个“球队”对象,即比赛时间、观众人数和比赛日期。
“球队”对象包含球队的总得分(随球队参加的每场比赛而变化)、“惩罚”对象列表和 JSON 中可能出现或不出现的“目标”以及“球员”对象的列表,一些其中在首发名单中。
“球员”是一个对象,它有一个唯一的姓名组合、一个数字,指的是“罚球”和“进球”对象以及这些对象所具有的属性。
当“惩罚”类型对象仅通过其编号引用“玩家”对象并将信息添加到“团队”和“玩家”类型对象时,问题就开始了。
- 我曾考虑过使用字典,但据我了解,由于球员与点球和进球联系在一起的方式,这不会奏效。
- 我曾考虑过一个一个地检索值,但这需要一些非常难以调试的控制流类型代码,并且对象再次相互引用的方式会有困难。
- 我已经查看了棉花糖库,但是由于作为 Python 的 OOP 新手,我仍然在努力理解简单示例的工作原理。
将传递给脚本的 JSON 字符串示例:
{"Game": {
"Time": "2017/01/11",
"Spectators": 6740,
"Location": "Newlands Stadium",
"T": [
{
"Surname": "Antamo",
"Name": "Dennis"
},
{
"Surname": "Prompa",
"Name": "Pedro"
}
],
"Team": [
{
"TeamName": "Barcelona",
"Players": {"Player": [
{
"Role": "V",
"Nr": 16,
"Surname": "Sam",
"Name": "Sidney"
},
{
"Role": "A",
"Nr": 17,
"Surname": "Cisovsky",
"Name": "Marian"
},
{
"Role": "U",
"Nr": 24,
"Surname": "Verratti",
"Name": "Marco"
},
{
"Role": "A",
"Nr": 27,
"Surname": "Hummels",
"Name": "Mats"
},
{
"Role": "U",
"Nr": 33,
"Surname": "Quintero",
"Name": "Juan"
},
{
"Role": "U",
"Nr": 37,
"Surname": "Díaz",
"Name": "Marcelo"
},
{
"Role": "A",
"Nr": 39,
"Surname": "Criscito",
"Name": "Domenico"
},
{
"Role": "A",
"Nr": 55,
"Surname": "Filip",
"Name": "Lucian"
},
{
"Role": "V",
"Nr": 56,
"Surname": "Saviola",
"Name": "Javier"
},
{
"Role": "A",
"Nr": 64,
"Surname": "Streller",
"Name": "Marco"
},
{
"Role": "U",
"Nr": 73,
"Surname": "Weidenfeller",
"Name": "Roman"
},
{
"Role": "A",
"Nr": 75,
"Surname": "Amelia",
"Name": "Marco"
},
{
"Role": "A",
"Nr": 84,
"Surname": "Sandro",
"Name": "Alex"
},
{
"Role": "U",
"Nr": 89,
"Surname": "Djuricic",
"Name": "Filip"
},
{
"Role": "A",
"Nr": 94,
"Surname": "Varela",
"Name": "Silvestre"
},
{
"Role": "A",
"Nr": 96,
"Surname": "Sauro",
"Name": "Gastón"
}
]},
"StartingLineUp": {"Player": [
{"Nr": 37},
{"Nr": 75},
{"Nr": 73},
{"Nr": 16},
{"Nr": 24},
{"Nr": 96},
{"Nr": 55},
{"Nr": 89},
{"Nr": 27}
]},
"Goals": {"VG": [
{
"Time": "06:09",
"P": [
{"Nr": 96},
{"Nr": 55}
],
"Nr": 24,
"ShotOnGoal": "N"
},
{
"Time": "11:07",
"P": [
{"Nr": 24},
{"Nr": 37},
{"Nr": 16}
],
"Nr": 73,
"ShotOnGoal": "N"
}
]},
"PlayerChanges": {"PlayerChange": {
"Time": "23:34",
"Nr1": 16,
"Nr2": 64
}},
"Penalties": {"Penalty": [
{
"Time": "41:40",
"Nr": 27
},
{
"Time": "56:24",
"Nr": 96
}
]}
},
{
"TeamName": "Skolmeistari",
"Players": {"Player": [
{
"Role": "A",
"Nr": 9,
"Surname": "Debess",
"Name": "Nils"
},
{
"Role": "A",
"Nr": 21,
"Surname": "Zibens",
"Name": "Vilhelms"
},
{
"Role": "V",
"Nr": 22,
"Surname": "Rausis",
"Name": "Vidmants"
},
{
"Role": "A",
"Nr": 25,
"Surname": "Zibens",
"Name": "Janka"
},
{
"Role": "U",
"Nr": 28,
"Surname": "Palodze",
"Name": "Rihards"
},
{
"Role": "A",
"Nr": 30,
"Surname": "Paraugs",
"Name": "Ciltvairis"
},
{
"Role": "A",
"Nr": 33,
"Surname": "Antena",
"Name": "Bo"
},
{
"Role": "U",
"Nr": 34,
"Surname": "Grants",
"Name": "Linards"
},
{
"Role": "U",
"Nr": 36,
"Surname": "Rokturis",
"Name": "Francis"
},
{
"Role": "A",
"Nr": 39,
"Surname": "Svilpe",
"Name": "Einars"
},
{
"Role": "V",
"Nr": 41,
"Surname": "Zirnis",
"Name": "Anderss"
},
{
"Role": "A",
"Nr": 44,
"Surname": "Kompass",
"Name": "Rolands"
},
{
"Role": "U",
"Nr": 47,
"Surname": "Kabacis",
"Name": "Kens"
}
]},
"StartingLineUp": {"Player": [
{"Nr": 9},
{"Nr": 36},
{"Nr": 21},
{"Nr": 39},
{"Nr": 25},
{"Nr": 34},
{"Nr": 30},
{"Nr": 28},
{"Nr": 47}
]},
"Goals": {"VG": [
{
"Time": "20:04",
"P": [
{"Nr": 9},
{"Nr": 25}
],
"Nr": 47,
"ShotOnGoal": "N"
},
{
"Time": "35:38",
"P": [
{"Nr": 30},
{"Nr": 28},
{"Nr": 44}
],
"Nr": 34,
"ShotOnGoal": "N"
},
{
"Time": "63:21",
"P": {"Nr": 34},
"Nr": 39,
"ShotOnGoal": "N"
}
]},
"PlayerChanges": {"PlayerChange": {
"Time": "29:24",
"Nr1": 25,
"Nr2": 44
}},
"Penalties": {"Penalty": {
"Time": "50:57",
"Nr": 36
}}
}
],
"VT": {
"Surname": "Rausis",
"Name": "Rihards"
}
}}
编辑:措辞和格式