python - 将 JSON 列表读入 Python 类的 Pythonic 方法
问题描述
考虑以下代码
import json
class Address(object):
def __init__(self, street, number):
self.street = street
self.number = number
def __str__(self):
return "{0} {1}".format(self.street, self.number)
class User(object):
address: List[Address] = []
def __init__(self, name, address: List):
self.name = name
for adr in address:
self.address.append(Address(*adr)) # is this needed?
def __str__(self):
return "{0} ,{1}".format(self.name, self.address)
if __name__ == '__main__':
js = '''{
"name": "Cristian",
"address": [{
"street": "Sesame",
"number": 122
},
{
"street": "Sesame",
"number": 122
}
]
}'''
j = json.loads(js)
print(j)
u = User(**j)
print(u.name)
print(u.address[0].number)
我的问题是,对于这种类型的 JSON,我们有一个值列表。我们需要遍历列表吗?或者有没有更pythonic的方式来简单地填充这个对象
address: List[Address] = []
从加载的json?
解决方案
你可以更喜欢python 中的dataclasses,json dataclasses
from typing import List
import json
from dataclasses import dataclass, field
from dataclasses_json import dataclass_json
class Address(object):
def __init__(self, street, number):
self.street = street
self.number = number
def __str__(self):
return "{0} {1}".format(self.street, self.number)
@dataclass_json
@dataclass
class User(object):
address: List[Address] = field(default_factory=lambda: [])
name: str = None
def __str__(self):
return "{0} ,{1}".format(self.name, self.address)
if __name__ == '__main__':
js = '''{
"name": "Cristian",
"address": [{
"street": "Sesame",
"number": 122
},
{
"street": "Sesame",
"number": 122
}
]
}'''
data = User.from_dict(json.loads(js))
print(data)
如果你使用__str__
它User
会打印
Cristian ,[{'street': 'Sesame', 'number': 122}, {'street': 'Sesame', 'number': 122}]
否则,如果您省略__str__
其中User
将打印
User(address=[{'street': 'Sesame', 'number': 122}, {'street': 'Sesame', 'number': 122}], name='Cristian')
Address
类可以避免
推荐阅读
- android - 成功设计房间数据库模式后,如何在网络响应中获取属于另一条记录的记录列表
- python - 如何在函数中使用多个输入并附加结果?
- pyspark - Pyspark:根据列过滤 DF,然后通过函数运行每个子集 DF
- perl - CGI Perl 在字符串中使用未初始化的值 $user
- angular - “p-menu”不是已知元素
- salesforce - 在 Salesforce 中显示大文本
- excel - Excel 中的事件可以在不单击按钮的情况下注册吗?
- python - 将图例的颜色与条形图 python 中的条相匹配?
- forms - 自定义条纹捐赠表单缺少 JS 代码
- apache-flink - FlinkSQL 中的 GROUP BY 和 OVER WINDOW 有何不同?