- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的模型都有一个将模型转换为字典的方法:
def to_dict(model):
output = {}
SIMPLE_TYPES = (int, long, float, bool, dict, basestring, list)
for key, prop in model._properties.iteritems():
value = getattr(model, key)
if value is None:
continue
if isinstance(value, SIMPLE_TYPES):
output[key] = value
elif isinstance(value, datetime.date):
dateString = value.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
output[key] = dateString
elif isinstance(value, ndb.Model):
output[key] = to_dict(value)
else:
raise ValueError('cannot encode ' + repr(prop))
return output
现在,我的模型之一 X
有一个 LocalStructuredProperty
:
metaData = ndb.LocalStructuredProperty(MetaData, repeated=True)
因此,repeated=True 意味着这将是元数据对象的列表。 MetaData
是另一种模型,它也具有相同的 to_dict
方法。
但是,当我调用 json.dumps(xInstance.to_dict())
时,出现异常:
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: MetaData(count=0, date=datetime.datetime(2012, 9, 19, 2, 46, 56, 660000), unique_id=u'8E2C3B07A06547C78AB00DD73B574B8C') is not JSON serializable
我该如何处理这个问题?
最佳答案
如果您想在 to_dict()
中以及在序列化为 JSON 之前处理此问题,您只需要在 to_dict()
中添加一些案例即可。首先,你说上面的 to_dict
定义是一个方法。我会将其委托(delegate)给函数或静态方法,这样您就可以在 ints
上调用某些东西,而无需先检查类型。这样代码会变得更好。
def coerce(value):
SIMPLE_TYPES = (int, long, float, bool, basestring)
if value is None or isinstance(value, SIMPLE_TYPES):
return value
elif isinstance(value, datetime.date):
return value.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
elif hasattr(value, 'to_dict'): # hooray for duck typing!
return value.to_dict()
elif isinstance(value, dict):
return dict((coerce(k), coerce(v)) for (k, v) in value.items())
elif hasattr(value, '__iter__'): # iterable, not string
return map(coerce, value)
else:
raise ValueError('cannot encode %r' % value)
然后只需将其插入到您的 to_dict
方法本身中即可:
def to_dict(model):
output = {}
for key, prop in model._properties.iteritems():
value = coerce(getattr(model, key))
if value is not None:
output[key] = value
return output
关于Python StructuredProperty 到字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12488001/
我有一个实体,其中有一个可变数量的另一个实体(所以我使用结构化属性,repeated=True),但是一个属性也可以容纳可变数量的单一实体类型。所以我的代码看起来像这样: class Property
虽然 NDB 文档说: Although a StructuredProperty can be repeated and a StructuredProperty can contain anoth
我的模型都有一个将模型转换为字典的方法: def to_dict(model): output = {} SIMPLE_TYPES = (int, long, float, bool,
StructuredProperty 是否引用父级或子级? class Invoices(ndb.Model): #Child class Customers(ndb.Model): #Parent
StructuredProperty 上没有 populate 方法(如 ndb.Model 上的方法),那么如何从字典中填充这些字段? 最佳答案 您仍然可以填充StructuredProperty。
我读过很多关于这两者的文章 ndb.StructuredProperty在 App Engine 的 NDB 中以及 ancestor queries 的使用将相关实体分组在一起。 但是,我不确定我是
我想将位置存储在 Google 的数据存储区中。每个条目应具有“sys”字段,其中应包含数据存储设置的信息。我有下面的类模型,并且 WebService JSON 请求/响应看起来不错,但我必须手动设
在一个汽车历史应用程序中,我必须创建不同的图表,其中某些车型可能会出现在一个或多个不同的图表中,如“最快的汽车”、“最好的汽车”等。然后必须在图表中对它们进行排序。我使用 StructuredProp
这里是 StructuredProperty from the docs 的示例: class Address(ndb.Model): type = ndb.StringProperty()
我有一个 HUser 模型(派生自 Google 的 User 类),它又包含 0 到 n 个社交帐户实例。这些帐户可以是对 Facebook、Twitter 或 LinkedIn 帐户的引用。我已经
假设我有一个 ndb.Model 类,我想将其用作另一个模型类的 StructuredProperty: class CommonExtraData(ndb.Model): count = n
这是我的ndb模型 from google.appengine.ext import ndb from mainsite.rainbow.models.CFCSocialUser import CFC
使用appengine mapreduce lib时,如何通过StructuredProperty进行过滤? 我尝试过: class Tag(ndb.Model): # ... tag
我正在尝试使用 Expando模型作为重复 StructuredProperty在另一个模型中。即,我想添加不定数量的Accounts给我的User模型。如Accounts根据其类型可以具有不同的属性
我使用 Google App Engine 进行后端开发,并使用数据存储模型和 Google Cloud Storage 来存储图像对象。这是我的媒体模型 class Media(ndb.Model)
我有一个 ndb.Model,其中包含一个 Repeated 属性。 class Resort(ndb.Model): name = ndb.StringProperty()
大家好,我正在尝试弄清楚如何针对以下情况构造我的查询 首先我定义了一个模型 class Variant(ndb.Expando): test = ndb.StringProperty() cl
大家好,我正在尝试弄清楚如何针对以下情况构造我的查询 首先我定义了一个模型 class Variant(ndb.Expando): test = ndb.StringProperty() cl
我是一名优秀的程序员,十分优秀!