【发布时间】:2015-10-05 15:55:35
【问题描述】:
您好,我刚刚开始尝试使用 python 和 tornado 以及 mongodb(我是新手)。我编写了一个简单的 get 函数来从我的 mongodb 中获取所有值并以 JSON 格式返回。问题是当我尝试将输出写为 JSON 字符串时,我在集合的最后一条记录之后得到一个尾随逗号 (,)。
class TypeList(APIHandler):
@gen.coroutine
def get(self):
cursor = db.vtype.find()
self.write("{"'"success"'": 1, "'"data"'":[")
while (yield cursor.fetch_next):
document = cursor.next_object()
self.write(format(JSONEncoder().encode(document)))
self.write(",")
self.write("]}")
class JSONEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o,ObjectId):
return str(o)
return json.JSONEncoder.default(self, o)
我的输出是这样的
{"success": 1, "data":[{"_id": "55a5e988545779f35d3ecdf4", "name": "fgkd", "city": "fghj"},{"_id": 12345.0, "name": "adfs", "city": "asd"},]}
谁能告诉我如何在最后一条记录之后去掉尾随逗号(,),因为那个逗号我收到了一个错误格式错误的 JSON 字符串
我尝试过使用 json 转储
@gen.coroutine
def get(self):
cursor = db.vtype.find({"brand": "Tata"})
while (yield cursor.fetch_next):
document = cursor.next_object()
self.write(json.dumps(document,default=json_util.default))
得到的输出为
{"Reg": "11ts", "_id": {"$oid": "55a5e988545779f35d3ecdf4"}, "Name": "Alex"}{"Reg": "12ts", "_id": {"$oid": "55a5eac6545779f35d3ecdf5"}, "Name": "asdf"}
当使用dumps[{ "data": document }]时
我得到的输出为
[{"data": {"Name": "asdf", "Reg": "asdfs", "_id": {"$oid": "55a5e988545779f35d3ecdf4"}}}]
[{"data": {"Name": "qwer", "Reg": "asdff", "_id": {"$oid": "55a5eac6545779f35d3ecdf5"}}}]
但我想要这样的输出
{"data": [{"Name": "asdf", "Reg": "asdfs", "_id": {"$oid": "55a5e988545779f35d3ecdf4"}},{"Name": "qwer", "Reg": "asdff", "_id": {"$oid": "55a5eac6545779f35d3ecdf5"}}]}
如果我做错了什么,请告诉我我不知道该怎么做。
【问题讨论】:
-
你可能想look at this
-
实际上在使用 JSON 转储 (json.dumps) 时出现错误“ObjectId(addsfsfsf)”不是 JSON 可序列化的。 ObjectId 来自我的 mongodb
-
也许你的问题应该问这个问题。
-
我写了
class JSONEncoder来解决这个序列化程序问题。 -
为什么要重新发明轮子?如果您发现了
json.dumps()的问题,您现在可能不需要为此烦恼。