我正在开发一个简单的应用程序引擎应用程序,该应用程序利用地理搜索接近度获取。
我对数据进行了搜索和一些额外的过滤,一切顺利(我检查了返回结果的数量,结果和预期的一样)但是,当我尝试使用简单的 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
这就是我称之为邻近搜索的方法:
lon = self.request.args.get("lon" , None)
lat = self.request.args.get("lat" , None)
check_in = self.request.args.get("check_in" , None)
check_out = self.request.args.get("check_out" , None)
if not lon or not lat:
return Response( json.dumps( "{ 'error' : 'desription..." ) )
result = Listing.get_listing_from_point(
lat = float(lat),
lon = float(lon),
start_date = check_in,
end_date = check_out)
return json.dumps( result )
在尝试查找问题原因时,我尝试返回搜索中第一个结果的字典,当我这样做时,出现以下错误:
TypeError: datastore_types.GeoPt(23.0, 42.2) is not JSON serializable 这让我相信我处理地理点的方式有问题......
我尝试搜索这两个错误都没有结果,有什么线索吗?
PS,这是完整的堆栈跟踪:
文件“C:\Program >Files\Google\google_appengine\google\appengine\ext\appstats\recording.py”,第 897 行,在 >appstats_wsgi_wrapper 结果 = app(environ, appstats_start_response)
文件“C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\tipfy\app.py”,第 245 行,在 >dispatch rv = self.handle_exception(request, e)
文件“C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\tipfy\app.py”,第 241 行,在 >dispatch rv = self.router.dispatch(request)
文件“C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\tipfy\routing.py”,第 105 行,在 >dispatch rv = rv()
文件“C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\tipfy\handler.py”,第 297 行,在 > call response = self.dispatch()
文件“C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\tipfy\handler.py”,第 88 行,在 >dispatch return self.handle_exception(exception=e)
文件“C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\tipfy\handler.py”,第 86 行,在 >dispatch return self.make_response(method(**request.rule_args))
文件“C:\Users\roi.SEMANTV\PycharmProjects\gayville_tipfy\backend\handlers.py”,第 47 行,>在获取返回 json.dumps(结果)
文件“C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson__init__.py”,行 >182,转储 **kw).encode(obj)
文件“C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py”,行 >312,编码块 = list(self.iterencode(o))
文件“C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py”,行 >262,在 _iterencode 中用于 self._iterencode_list(o,标记)中的块:
文件“C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py”,行 >170,在 _iterencode_list 中用于 self._iterencode(值,标记)中的块:
文件“C:\
文件“C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py”,第 279 行,在 _iterencode_default newobj = self.default(o)
文件“C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py”,行 >300,默认提高 TypeError("%r is not JSON serializable" % (o,) )