[英]excluding fields from json serialization in python using jsonpickle
[英]How to exclude specific fields on serialization with jsonpickle?
我正在使用Flask的SQLAlchemy擴展。 在使用jsonpickle序列化我的模型(也用於數據庫操作)時 ,我想要忽略一些特定的屬性。 有沒有辦法讓我設定這些規則?
SQLAlchemy將一個名為_sa_instance_state
的屬性添加到對象中。 總之,我不希望這個字段在JSON輸出中。
您不能告訴默認的類選擇器忽略某些東西,不。
jsonpickle
確實支持pickle
模塊 __getstate__
和__setstate__
方法。 如果您的類實現了這兩個方法,那么jsonpickle
將使用返回的jsonpickle
來代表狀態。 這兩種方法都需要實施。
如果__getstate__
不落實, jsonpickle
使用__dict__
屬性,而不是,所以你自己的版本只需要使用相同的字典,取出_sa_instance_state
鍵和你做:
def __getstate__(self):
state = self.__dict__.copy()
del state['_sa_instance_state']
return state
def __setstate__(self, state):
self.__dict__.update(state)
無論__getstate__
返回什么__getstate__
將以遞歸方式進一步處理,因此無需擔心在那里處理子對象。
如果添加__getstate__
和__setstate__
不是一個選項,您還可以為您的類注冊自定義序列化處理程序 ; 缺點是雖然__getstate__
只能返回一個字典,但自定義處理程序需要返回一個完全展平的值。
這個將幫助其他人完成他們的任務:
像你的自定義jsonpickle
包一樣在類包中創建一個這樣的類:
class SetGetState:
def __getstate__(self):
state = self.__dict__.copy()
try:
class_name = '_' + self.__class__.__name__ + '__'
new_items = {key:value for key, value in state.items() if class_name not in key}
return new_items
except KeyError:
pass
return state
並且在類中繼承這個不需要私有屬性序列化
class Availability(jsonpickle.SetGetState):
pass
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.