私は、地理検索の proxy_fetch を利用する単純なアプリ エンジン アプリケーションに取り組んでいます。
データに対して検索と追加のフィルタリングを実行すると、すべてうまくいきます(返された結果の数を確認しましたが、予想どおりでした)しかし、単純な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 result = 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 行目、> in get return json.dumps( result )
ファイル "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、self._iterencode_list(o、マーカー) のチャンクの _iterencode 内:
ファイル "C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py"、170 行目、self._iterencode のチャンクの _iterencode_list (値、マーカー):
ファイル "C:\Program Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py"、273 行目、self._iterencode_default(o、マーカー) のチャンクの _iterencode:
ファイル "C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py"、279 行目、_iterencode_default newobj = self.default(o)
File "C:\Program >Files\Google\google_appengine\lib\django_0_96\django\utils\simplejson\encoder.py", line >300, デフォルトでは TypeError("%r is not JSON serializable" % (o,) )