2013-08-23 64 views
0

当我尝试从我的mongodb数据库中使用flask-restfulpymongo获取这些数据时,我得到了一些格式化很好的数据。Mongodb返回格式化的数据

例如。

这是数据在数据库中的样子。

{ "_id" : ObjectId("5217f3cc7466c06862c4a4f7"), "Hello" : "World" }

这是个什么样子时,它会从数据库返回等。

"{\"_id\": {\"$oid\": \"5217f3cc7466c06862c4a4f7\"}, \"Hello\": \"World\"}"

使用此代码:

def toJSON(data): 
    return json.dumps(data, default=json_util.default) 

这:

def get(self, objectid): 
    collection = db["products"] 
    result = collection.find_one({"_id": ObjectId(objectid)}) 
    return toJSON(result) 

谁知道我做错了吗?

回答

0

flask-restful希望您在此返回dictionary而不是json。它会自行将字典转换为json。所以,你的代码看起来应该像

def get(self, objectid): 
    collection = db["products"] 
    result = collection.find_one({"_id": ObjectId(objectid)}) 
    result['_id'] = result['_id'].__str__() 
    return result 

当您返回jsonflask-restful看到这些推断,这是一个字符串和转义双引号。

+0

这就是我得到如果我返回结果:TypeError:ObjectId('5217f3cc7466c06862c4a4f7')不是JSON可序列化 – nkobber

+0

@Razcou我更改了代码以避免此错误。所以你必须在你的mongo interacton代码上编写一些包装来将ObjectId转换为str,反之亦然 – lovesh

2

不,这应该是这样的。

MongoDB使用BSON,它扩展了JSON和一些额外的类型,比如ObjectId。要在JSON中表示这些人,您会看到奇怪的$oid和朋友。

反斜杠最有可能通过某种工具添加以允许在字符串文本中引用引号(用引号引起来)。除非你以某种方式对事物进行双重编码。

+0

但所有这些反斜杠呢?他们来自哪里? – nkobber

+0

我在问题中增加了一些代码。这就是我所做的所有返回数据。 – nkobber

+0

我发现它以某种方式添加了背景空间,令人安心。要弄清楚为什么。 – nkobber