Python 查询对象不可序列化

标签 python json google-app-engine serialization jinja2

当我尝试对查询对象进行编码时,出现以下错误:

  File "C:\Program File\Python27\lib\json\encoder.py", line 264, in iterencode
        return _iterencode(o, 0)
      File "C:\Program File\Python27\lib\json\encoder.py", line 178, in default
        raise TypeError(repr(o) + " is not JSON serializable")
    TypeError: ActivitySummaries(key=Key('ActivitySummaries', 634), activated_users=0, broker_approved=0, broker_registered=0, broker_searched=1, closed_deals=0, company_registered=0, company_searched=4, deal_appoved=0, investor_approved=0, investor_registered=0, investor_searched=3, registered_users=0, timestamp=datetime.datetime(2013, 4, 8, 20, 41, 47, 574000), watchlisting=0) is not JSON serializable

j查询:

$.ajax({
        data: someData,
        url: someUrl,
        type: 'POST',
        dataType: 'json',
        success: function(data)
        {
            alert("Success");
        },
        error : function(request, status, thrownError){
            alert("Error");
            return;
                }
    });

处理程序:

 search_pattern = roledb.ActivitySummaries.searchPatterns(start_date, end_date)

            self.response.write(json.dumps(search_pattern))

roledb.py

class ActivitySummaries(ndb.Model):    
    def searchPatterns(cls, start_date, end_date):
            activities = cls.query()
            results = []
            for activity in activities:
                if ( activity.timestamp >= start_date and activity.timestamp <= end_date ):
                    results.append(activity)

            return results

我是 Google App Engine 的新手,我不知道为什么它不能使用 JSON 进行序列化。

我们将不胜感激任何意见。

最佳答案

您只能在 Python 中序列化“简单”数据类型,例如字典、数组等。因此您不应序列化查询对象,而应序列化此查询的结果——我猜它会是一个数组。

另一种解决方案是子类化 JSONEncoder处理任意值,就像我为 DateTime 做的片段:

import datetime
from json import JSONEncoder

class DateEncoder(JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime.date):
            return obj.isoformat()
        return JSONEncoder.default(self, obj)

要使用它请指定 cls=DateEncoder:

json.dumps(data, cls=DateEncoder)

关于Python 查询对象不可序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16351286/

相关文章:

python 细节 : Array value must start with "{" or dimension information

json - AWS Data Pipeline - 在创建 EMR 期间设置 Hive 站点值

html按钮点击上的python类

python - 将 PIL 与 Google Appengine SDK 结合使用时出现问题

java - Google 云端点(应用程序引擎)+ oauth2 与 android 集成

python - 将 .readinto(b) 方法添加到 tarfile 的 ExFileObject 中?

python - 使用 Python 和 OpenCV3 检测流程图中的文本区域

python - 蛋白质互信息

sql - PostgreSQL 11 : multiple key-value pairs with json_object_agg()

c++ - Json输出成单行