2

こんにちは私はカスタムJSONEncoderを作成しましたが、たまたまこの問題が発生しました。dumpssimplejsonの関数を使用すると、ネストされたオブジェクトが文字列としてシリアル化されます。たとえば、私はこれを使用します:

simplejson.dumps({'lat': obj.lat, 'lon': obj.lon})

そしてこれを入手してください:

{
website: "http://something.org",
location: "{"lat": 12.140158037163658, "lon": -86.24754807669069}"
}

ロケーションオブジェクトが二重引用符で囲まれている場合は、JSONオブジェクトとして適切にダンプするロケーションオブジェクトを指定する方法があります(二重引用符は使用しません)。

編集

class jsonEncoder(simplejson.JSONEncoder):
    def default(self, obj):
        isinstance(obj, db.GeoPt):
            return simplejson.dumps({'lat': obj.lat, 'lon': obj.lon})

        else:
            return simplejson.JSONEncoder.default(self, obj)
4

1 に答える 1

4

objがdb.GeoPtの場合、default()から文字列を返さないでください。代わりに、キー「lat」と「lon」を使用してdictを返し、JSONライブラリにdictをシリアル化させます。

これを試して:

class jsonEncoder(simplejson.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, db.GeoPt):
            return {'lat': obj.lat, 'lon': obj.lon}
        else:
            return simplejson.JSONEncoder.default(self, obj)
于 2012-09-02T07:18:13.820 に答える