Python如何删除json字符串中的最后一个逗号(,)

2024-04-25 01:11:09 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我刚开始用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)

我的输出是

^{pr2}$

有谁能告诉我怎样才能去掉最后一条记录后面的逗号(,),因为这个逗号,我得到了一个格式错误的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"}}]}

如果我做错了什么,请告诉我我不知道该怎么做。在


Tags: nameselfidjsondefaultdatagetreg
3条回答

所以你的问题是MongoDB ObjectId?那么也许你应该使用^{}。它可能已经作为MongoDB驱动程序的一部分进行了安装(这些驱动程序都使用pymongo),但是如果没有,那么就安装它。在

import bson
import bson.json_util
from bson.json_util import dumps
from bson import ObjectId

dumps({ "a": ObjectId() })

'{"a": {"$oid": "55a782261d41c80b0432b811"}}'

或者:

^{pr2}$

它的工作原理和“转储”一样,只是所有的BSON类型处理都是由它构建的。在

同样,不需要在这里重新发明轮子和“自己滚”,因为人们已经在使用这个。在

JSONEncoder的实现运行良好。只需按照预期的方式使用:

>>> JSONEncoder().encode({'data': [ObjectId(), ObjectId()]})
'{"data": ["<objId>", "<objId>"]}'

编码器将负责序列化dict、对象、列表、元组、字符串(包括unicode)、int、long、float、boolean和None。您的实现也让它知道ObjectIds。很 完美!在

只需丢失字符串连接并使用encode。在

您没有理由通过文本连接来构建JSON文档。在

Python在您应该使用的标准库中有一个非常好的json模块。将文档构建为一个由dict组成的Python列表,然后使用json.dumps()将整个文档转换为有效的JSON。在

相关问题 更多 >