这将是一个两部分的问题,
在这里,我正在向我的ndb服务发送一个GeoPt。JSON如下所示。
{
"DriverId": 1,
"Startpoint": {
"longitude": 46.764084,
"latitude": -71.351396
},
"Endpoint": {
"longitude": 46.764084,
"latitude": -71.351396
},
"Regular": false,
"DateAndTime": "28/03/2015",
"PlacesAvailable": 3,
"ValLift": 3
}
我使用此函数序列化我的DateTimes
def serialiser__json(objet):
if isinstance(objet, datetime.datetime):
return objet.replace(microsecond=0).isoformat()
elif isinstance(objet, datetime.date):
return objet.isoformat()
else:
return objet
现在,我想知道如何将GeoPt序列化为JSON,并使其返回与发送时的外观相同,例如,这是我的Route模型。
class Route(ndb.Model):
driver_id = ndb.IntegerProperty()
requester_id = ndb.IntegerProperty()
startpoint = ndb.GeoPtProperty(required=True)
endpoint = ndb.GeoPtProperty(required=True)
regular = ndb.BooleanProperty(required=True)
date_and_time = ndb.DateTimeProperty(required=True)
places_available = ndb.IntegerProperty()
val_lift = ndb.IntegerProperty()
这是我在POST定义中添加长纬度的方法
newroute.startpoint = ndb.GeoPt(route_json['Startpoint']['longitude'],route_json['Startpoint']['latitude'])
newroute.endpoint = ndb.GeoPt(route_json['Endpoint']['longitude'],route_json['Endpoint']['latitude'])
所以第一部分
如何序列化存储在模型中的GeoPt?
第二部分,
如何使其具有与发送时相同的外观(在其中返回带有经度和纬度“成员”的StartPoint)?
提前致谢。
您刚刚张贴作为自答案的身体变化的独有的命名serialiser__json
(怪异的标识符中使用两个相邻的下划线,但法律)给你正确的JSON功能,但并不能满足你很严格的要求,为“第二部分” :
如何使其外观与发送方式相同
这样做有几个问题:(A),键的顺序(当使用a时dict
,它是任意的,尽管具有相等的语义,但可能导致结果JSON字符串的“外观”完全不同);(B),空格(您输入的JSON字符串显然具有各种美化的空格,包括用于缩进的换行和空格);以及(C)可能是次要问题,格式为float
s的有效位数。
(A)可以通过collections.OrderedDict
按您希望键的顺序建立a来固定-json.dumps
该有序字典的a将尊重键的顺序。(B)和(C)更微妙,需要更多的“美化”工作-您的产品中是否真的需要这种化妆品...?
(顺便说一下,所有这些问题几乎都与App Engine无关)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句