- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想我在这里遗漏了一些小东西。我正在测试 Python 框架 Flask 和 Flask-MongoAlchemy,并希望将实体转换为 JSON 输出。这是我的代码(抽象):
from flask import Flask
from flaskext.mongoalchemy import MongoAlchemy
try:
from bson.objectid import ObjectId
except:
pass
#a bunch of code to open the mongoDB
class ClassA(db.Document):
title = db.StringField()
field1 = db.StringField()
field2 = db.BoolField()
@app.route('/api/classA', methods=['GET'])
def api_list_all
a = ClassA.query.all()
result = []
for b in a:
result.append(b.wrap())
print result
return json.dumps(result)
如果没有 json.dumps 行,打印语句会提示正确的结果。但只有当我对结果运行 json.dumps 时,它才会产生:
TypeError: ObjectId('...') 不是 JSON 可序列化的
我错过了什么?
最佳答案
结果是某种包含 ObjectId 类型内容的 mongo 文档,您必须告诉 json 如何反序列化这些内容。对于其他特定于 mongo 的类型,例如 ReferenceField()、EmbeddedDocumentField() 等,您会遇到同样的问题。您必须编写一个可以传递给 json 的反序列化函数。我使用的是:
def encode_model(obj, recursive=False):
if obj is None:
return obj
if isinstance(obj, (mongoengine.Document, mongoengine.EmbeddedDocument)):
out = dict(obj._data)
for k,v in out.items():
if isinstance(v, ObjectId):
if k is None:
out['_id'] = str(v)
del(out[k])
else:
# Unlikely that we'll hit this since ObjectId is always NULL key
out[k] = str(v)
else:
out[k] = encode_model(v)
elif isinstance(obj, mongoengine.queryset.QuerySet):
out = encode_model(list(obj))
elif isinstance(obj, ModuleType):
out = None
elif isinstance(obj, groupby):
out = [ (g,list(l)) for g,l in obj ]
elif isinstance(obj, (list)):
out = [encode_model(item) for item in obj]
elif isinstance(obj, (dict)):
out = dict([(k,encode_model(v)) for (k,v) in obj.items()])
elif isinstance(obj, datetime.datetime):
out = str(obj)
elif isinstance(obj, ObjectId):
out = {'ObjectId':str(obj)}
elif isinstance(obj, (str, unicode)):
out = obj
elif isinstance(obj, float):
out = str(obj)
else:
raise TypeError, "Could not JSON-encode type '%s': %s" % (type(obj), str(obj))
return out
然后您将结果处理为:
return json.dumps(result, default=encode_model)
或类似的东西。
关于python - MongoAlchemy 文档通过 Flask-MongoAlchemy 编码为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7818956/
我想我在这里遗漏了一些小东西。我正在测试 Python 框架 Flask 和 Flask-MongoAlchemy,并希望将实体转换为 JSON 输出。这是我的代码(抽象): from flask i
有谁知道如何使用 mongodb alchemy 创建带有嵌入式文档的模型?我在文档中进行了搜索,但没有关于这样做的任何示例。 最佳答案 看看: https://github.com/jeffjenk
我正在学习 MongoAlchemy,这是 MongoDB 的 Python 驱动程序之上的一层。假设有一个 Python 类,从 MongoDB 对象映射,如下所示: from mongoalche
我尝试在 Flask 中为我的 MongoAlchemy 类建模。这是我的模型: { "_id" : ObjectId("adfafdasfafag24t24t"), "name" :
如标题所示,我想删除数据库中的所有内容。我正在使用 Flask 和 MongoAlchemy 为数据库在 Python 中创建一个应用程序。我有类 People 对文档进行建模。结构是: class
在使用 MongoAlchemy 时,我一直在与一个奇怪的错误作斗争。 我的 Participant 模型上有一个 name = db.StringField()。大多数时候它工作正常,但由于某种原因
我在个人项目中使用 Flask-MongoAlchemy。我有一些 .cfg 输入文件,我想将其解析并制作成 mongodb 文档条目。不幸的是,.cfg 文件是平面文件,我想从每个文件制作多个不同的
我查看了文档,并广泛搜索了 Google,但没有找到解决我的问题的方法。 这是我的 readRSS 函数(请注意,“get”是 Kenneth Reitz 请求模块的一种方法): def readRS
这是我的类(class): class Presentation(db.Document): title = db.StringField(max_length=120, required=T
我正在使用 mongoalchemy 版本 0.21,无法弄清楚在哪里指定 mongodb 连接字符串。 最新的可用文档是针对 0.14 的,即使如此,我也无法弄清楚在哪里可以指定 MongoDB 连
现在看来我可以连接到 MongoDB 集群,但是当我尝试保存时出现以下错误: TypeError: init() 得到了一个意外的关键字参数 'safe' 我安装了 Flask-MongoAlchem
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在使用 MongoDB 测试 Python 框架 Flask 和 Flask-MongoAlchemy(当然)。当我在测试应用程序中构建多个文档时,我希望通过 WTForms 验证表单。 任何人都
我是一名优秀的程序员,十分优秀!