如何遍历json响应并创建对象

时间:2020-10-22 20:01:05

标签: python json

我正在学习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

2 个答案:

答案 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 = []