我正在学习Python,并且搞不清API调用和Json响应。我想将响应变成对象。我的方法是使用嵌套循环遍历json响应,并为每个json对象创建一个python对象。
json响应包含多个家庭,每个家庭都有许多家庭成员。问题是,当我将它们变成python对象时,每个家族都会从所有家族中获取所有成员。我猜想这与循环中的作用域有关,但是我找不到解决该问题的正确方法。
所有帮助将不胜感激:
json响应:
families_from_api = """{
"success":true,"data":[
{
"family":"Anderson","members":[
{"name":"Roger","age":36},
{"name":"Alice","age":"24"},
{"name":"Sammy","age":12}
]
},
{
"family":"Lindquist","members":[
{"name":"Martin","age":52},
{"name":"Lukas","age":"46"},
{"name":"Anne","age":20}
]
}
]
}
"""
# Pythonize the response
families_info = json.loads(families_from_api)
families = families_info['data']
课程:
class Member:
name = ""
age = 0
class Family:
name = ""
members = []
遍历响应并创建对象:
# Array to store all families
all_families = []
# Iterate through the response and turn into objects
for family in families:
f = Family()
f.name = family['family']
for member in family['members']:
m = Member()
m.name = member['name']
m.age = member['age']
f.members.append(m)
# Append the created family object to an array
all_families.append(f)
打印我的对象:
# Iterate through objects and print families and members
for family in all_families:
print("Family name:", family.name, "has these members:")
for member in family.members:
print("Name:", member.name, "Age", member.age)
结果:
Family name: Anderson has these members:
Name: Roger Age 36
Name: Alice Age 24
Name: Sammy Age 12
Name: Martin Age 52
Name: Lukas Age 46
Name: Anne Age 20
Family name: Lindquist has these members:
Name: Roger Age 36
Name: Alice Age 24
Name: Sammy Age 12
Name: Martin Age 52
Name: Lukas Age 46
Name: Anne Age 20
答案 0 :(得分:1)
当您像在那样分配一个类属性时,该属性在该类的所有实例中都是全局的,因此应改为使用实例属性。
https://www.samsung.com/semiconductor/minisite/ssd/download/tools/
答案 1 :(得分:1)
您的类缺少 init 方法,该方法在调用构造函数时会自动调用
当类定义 init ()方法时,类实例化会自动为新创建的类实例调用 init ()。因此,在此示例中,可以通过以下方式获取新的初始化实例:
(来自https://docs.python.org/3/tutorial/classes.html)
您的代码应该是针对课程的
class Member:
def __init__(self):
self.name = ""
self.age = 0
class Family:
def __init__(self):
self.name = ""
self.members = []