0

当我尝试从我的 mongodb 数据库中获取这些数据时,flask-restfulpymongo得到了一些格式奇怪的数据。

例如。

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

{ "_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)

有人知道我在做什么错吗?

4

2 回答 2

2

不,应该是这样的。

MongoDB 使用 BSON,它为 JSON 扩展了一些额外的类型,例如 ObjectId。为了在 JSON 中表示它们,你会得到看起来很奇怪的$oid朋友。

反斜杠很可能是由某些工具添加的,以允许在字符串文字(由引号括起来)内使用引号。除非您以某种方式对事物进行双重编码。

于 2013-08-24T00:00:06.207 回答
0

flask-restful期望您返回 adictionary而不是json这里。json它会自行转换字典。所以你的代码应该看起来像

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

当您返回时会json flask-restful看到并推断它是一个字符串并转义双引号。

于 2013-08-24T03:43:14.370 回答