我正在开发一个简单的应用程序引擎应用程序,它利用地理搜索邻近性提取。在
我对数据执行了搜索和一些额外的过滤,一切都很顺利(我检查了返回结果的数量,这与预期的一样),但是,当我试图使用简单的json将其转储到json中时,我得到了以下错误:
TypeError: < backend.models.Listing object at 0x0570CC90 >is not JSON serializable
这是我在代码中定义对象的方式:
class Listing(GeoModel):
currency=db.IntegerProperty( default = CURRENCY["EURO"] )
title=db.StringProperty(required = True )
admins = db.ReferenceProperty( User )
.
. Some uninteresting properties goes here, Only Integer and String Properties
.
active = db.BooleanProperty()
@staticmethod
def get_listing_from_point( lat , lon ,
max_dist=MAX_SEARCH_RADIUS,
max_result=MAX_SEARCH_RESULT,
start_date=None,end_date=None):
rich_query = Listing.all()
result = Listing.proximity_fetch( rich_query ,
geo.geotypes.Point( lat , lon ),
max_results = max_result,
max_distance = max_dist )
result = list( rich_query )
valid_list =
[i for i in list( result ) if i.check_availability( start_date ,
end_date )]
return valid_list
这就是我称之为邻近搜索的方法:
^{pr2}$在试图找到问题的原因时,我试图返回搜索中第一个结果的dict,当我这样做时,我得到了以下错误:
TypeError: datastore_types.GeoPt(23.0, 42.2) is not JSON serializable Which leads me to believe there is something wrong in the way I handle my geo points...
我试着寻找这两个错误都没有结果,有什么线索吗?在
另外,这是完整的堆栈跟踪:
File "C:\Program >Files\Google\google_appengine\google\appengine\ext\appstats\recording.py", line 897, in >appstats_wsgi_wrapper result = app(environ, appstats_start_response)
File "C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\tipfy\app.py", line 245, in >dispatch rv = self.handle_exception(request, e)
File "C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\tipfy\app.py", line 241, in >dispatch rv = self.router.dispatch(request)
File "C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\tipfy\routing.py", line 105, in >dispatch rv = rv()
File "C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\tipfy\handler.py", line 297, in >call response = self.dispatch()
File "C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\tipfy\handler.py", line 88, in >dispatch return self.handle_exception(exception=e)
File "C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\tipfy\handler.py", line 86, in >dispatch return self.make_response(method(**request.rule_args))
File "C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\backend\handlers.py", line 47, >in get return json.dumps( result )
File "C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson__init__.py", line >182, in dumps **kw).encode(obj)
File "C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py", line >312, in encode chunks = list(self.iterencode(o))
File "C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py", line >262, in _iterencode for chunk in self._iterencode_list(o, markers):
File "C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py", line >170, in _iterencode_list for chunk in self._iterencode(value, markers):
File "C:\Program Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py", line 273, in _iterencode for chunk in self._iterencode_default(o, markers):
File "C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py", line 279, in _iterencode_default newobj = self.default(o)
File "C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py", line >300, in default raise TypeError("%r is not JSON serializable" % (o,))
为了序列化为JSON,复杂的Python对象必须可以表示为简单类型的字典。“object is not JSON serializable”错误基本上意味着Python的JSON编码器不知道如何序列化对象。在
所以,如果结果是一个GeoPt,您可以这样序列化它:
return json.dumps({'lat': result.lat, 'lon': result.lon})
相关问题 更多 >
编程相关推荐