python - 从 JSON 记录(字典)创建对象

标签 python json python-3.x class dictionary

我正在尝试使用来自某个 JSON 文件的数据创建一个 Python 类。 JSON 文件包含以下字典列表:

    {
  "phonebook": [
    {
      "full_name": "John Doe",
      "address": "QC",
      "phone_number": "+634444444",
      "email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c7ada8afa9a387bfbebde9a4a8aa" rel="noreferrer noopener nofollow">[email protected]</a>"
    },
    {
      "full_name": "Jane Doe",
      "address": "LP",
      "phone_number": "+63555555",
      "email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="412b202f2f2f2424240139383b6f222e2c" rel="noreferrer noopener nofollow">[email protected]</a>"
    },
    {
      "full_name": "Dragon Slayer",
      "address": "VC",
      "phone_number": "+6311111111",
      "email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="05617669647c6077457d7c7f2b666a68" rel="noreferrer noopener nofollow">[email protected]</a>"
    }
  ]
}

我还有一个类,它应该调用 JSON 文件中的所有值。

import json

# read file
with open('phonebook.json', 'r') as myfile:
    data = myfile.read()

# parse file
phonebook = json.loads(data)

class BaseAccount:
    def __init__(self, full_name, address, phone_number, email):
        self.full_name = full_name
        self.address = address
        self.phone_number = phone_number
        self.email = email

    def display_info(self):
        print("Full Name:", self.full_name)
        print("Address:", self.address)
        print("Telephone Number:", self.phone_number)
        print("E-mail:", self.email)

db = BaseAccount(full_name, address, phone_number, emai)
db.display_info()

我不太清楚如何将 JSON 文件调用到我的类中。能否请您指导一下?

最佳答案

来自python3.8,dataclasses让这变得简单:

from dataclasses import dataclass

@dataclass
class BaseAccount:
    full_name: str
    address: str
    phone_number: str
    email: str

    def display_info(self):
        ...
accounts = [BaseAccount(**entry) for entry in data['phonebook']]
accounts[0].display_info()

在第二个片段中,我使用字典解包来解包 data["phonebook"] 中的每条记录,以初始化新的 BaseAccount

关于python - 从 JSON 记录(字典)创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63554472/

相关文章:

python - input() vs raw_input() 相关安全问题的简单解释

arrays - Swift 3 排序 jsonArray

android - 如何在 Android 中解析 JSON?

json - Play Json : Transforming a Reads[T] to Reads[Seq[T]] without implicits

python - 仅使用抽象列表函数将字符串中的每个字母与其在字符串中的位置(从 1 开始)相乘

python - Django 默认语言不起作用

python - 将 groupby 中的字符串与条件连接起来

python - Dataframe 到 PowerBI 的 json 格式

python - 当已知字符串中出现的次数为 N 时,查找字符串中重复出现的术语

从接近阈值的 Numpy 数组中删除元素的 Pythonic 方法