python - Python 复合类 JSON 序列化
问题描述
我有我称之为复合类的东西
因此,LegoSet 类是由 LegoSetVariant 类的实例构造而成,而 LegoSetVariant 类又是由许多不同的类实例构造而成。
这很好,我可以成功地初始化类。但是,然后我想将类对象序列化为 JSON。这被证明有点棘手,因为复合类错误为不可序列化。
class LegoSet:
def __init__(
self,
typename,
id,
productCode,
name,
slug,
primaryImage,
baseImgUrl,
overrideUrl,
variant,
):
self.__typename = typename
self.__id = id
self.__productCode = productCode
self.__name = name
self.__slug = slug
self.__primaryImage = primaryImage
self.__baseImgUrl = baseImgUrl
self.__overrideUrl = overrideUrl
self.__variant = variant
class LegoSetVariant:
def __init__(self, id, sku, salePercentage, attributes, price, listPrice):
self.__id = id
self.__sku = sku
self.__salePercentage = salePercentage
self.__atributes = attributes
self.__price = price
self.__listPrice = listPrice
class LegoSetVariantAttributes:
def __init__(
self,
rating,
maxOrderQuantity,
availabilityStatus,
availabilityText,
vipAvailabilityStatus,
vipAvailabilityText,
canAddToBag,
canAddToWishlist,
vipCanAddToBag,
onSale,
isNew,
featuredFlags,
):
self.__rating = rating
self.__maxOrderQuantity = maxOrderQuantity
self.__availabilityStatus = availabilityStatus
self.__availabilityText = availabilityText
self.__vipAvailabilityStatus = vipAvailabilityStatus
self.__vipAvailabilityText = vipAvailabilityText
self.__canAddToBag = canAddToBag
self.__canAddToWishlist = canAddToWishlist
self.__vipCanAddToBag = vipCanAddToBag
self.__onSale = onSale
self.__isNew = isNew
self.__featuredFlags = featuredFlags
class LegoSetVariantAttributesFeaturedFlags:
def __init__(self, key, label):
self.__key = key
self.__label = label
class LegoSetVariantPrice:
def __init__(self, formattedAmount, centAmount, currencyCode, formattedValue):
self.__formattedAmount = formattedAmount
self.__centAmount = centAmount
self.__currencyCode = currencyCode
self.__formattedValue = formattedValue
class LegoSetVariantListPrice:
def __init__(self, formattedAmount, centAmount):
self.__formattedAmount = formattedAmount
self.__centAmount = centAmount
解决方案
试试这个:
def unpack_into_dict(object):
res = {}
for key, val in object.__dict__.items():
if hasattr(val, '__dict__'):
res[key] = unpack_into_dict(val)
else:
res[key] = val
return res
推荐阅读
- javascript - 如何使用 JSDoc 按文件名重新组合文档
- c - 替换 C 函数并将旧的标记为错误/已弃用
- java - 蚂蚁匹配器以
- c++ - 用于包装数组的类的转换与下标运算符重载
- smpp - 如何获取 smpp 端口 kannel 的交货报告
- javascript - 节点双工流在读取时实际上并不发出数据
- omnet++ - Omnetpp INET 错误:初始化后移动位置不是有限数
- python - 从 pearson 相关数据中提取 r 值
- java - 构建 java 项目时 build.gradle 中的 Groovy 语法
- matlab - 在 Matlab 上为 GPU 并行化值函数迭代编写内核