【发布时间】:2018-01-03 13:16:57
【问题描述】:
免责声明:我是面向对象 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"
}
}}
编辑:措辞和格式
【问题讨论】:
-
没问题?请说明您尝试了什么,您期望什么,以及您得到了什么。
-
你考虑过
namedtuple吗? stackoverflow.com/questions/6578986/… -
我无处可去,我正在寻找可以尝试的东西。广泛的谷歌搜索甚至没有产生任何有希望的东西,因此我的问题。
-
这有点模糊,你的很多“问题”并没有真正的意义。如果您已经创建了一个数据库来存储球队和球员,您可以在那里查找它们,不是吗?
-
我没有数据库。我想先获取数据的对象表示,然后我会尝试解决将数据导入数据库的问题。
标签: python json oop object marshmallow