当前位置: 首页 > 知识库问答 >
问题:

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

左丘照
2023-03-14

嗨,我刚刚开始用巨蟒和龙卷风以及mongodb进行实验(我是新手)。我写了一个简单的get函数来获取我的mongob中的所有值,并以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":{"$id":"55a5e988545779f35d3ecdf4"},"Name":"Alex"}{"Reg":"12ts","_id":{"$id":"55a5eac6545779f35d3ecdf5"},"Name":"asdf"}

当使用转储[{"data":文档}]

我得到的输出为

[{"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"}}]}

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

共有3个答案

毋炳
2023-03-14

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

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

编码器将负责序列化dits、对象、列表、元组、字符串(包括Unicode)、int、long、浮动、布尔值和无。您的实现也让它知道ObjectIds。完美!

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

陶炫明
2023-03-14

那么您的问题是MongoDBObjectId?那么也许你应该使用bson。json_util。它可能已经作为MongoDB驱动程序依赖项的一部分安装了(这些驱动程序都使用pymongo),但如果没有安装,请安装它。

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

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

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

或:

dumps([{ "a": ObjectId(), "b": 1 },{ "a": ObjectId(), "b": 2 }])
'[{"a": {"$oid": "55a79543268e150463d51799"}, "b": 1}, {"a": {"$oid": "55a79543268e150463d5179a"}, "b": 2}]'

它的工作原理就像“转储”,除了所有的BSON类型处理都是由它构建的。

同样,没有必要在这里重新发明轮子和“滚你自己的”,因为人们已经在使用这个了。

谭毅然
2023-03-14

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

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

 类似资料:
  • 问题内容: 我在SQL表中有一个文本备注字段,如果它是逗号,则需要删除该字段中的最后一个字符。 因此,例如,如果我有这些行,则需要从第2行和第4行中删除逗号。 输出为: 有任何想法吗? 问题答案: 使用和: 首先,您希望您的数据摆脱前导和尾随空格。然后检查第一个字符是否为。如果是的话,将其删除,否则什么也不做。然后又回来了。您可以使用删除第一个字符。 SQL小提琴

  • 问题内容: 我正在使用循环从数据库中获取值,我的结果是: 我想要这样: 我想在循环的最后一个值后删除逗号。 问题答案: 使用功能: 第二个参数指示要删除的字符。

  • 我将在main方法中这样做,首先实例化该类的一个对象,即。 代码示例:

  • 问题内容: 我有一个带有这种数据的mysql表 现在我有成千上万的这样的行。我希望对数据进行某种处理,使其看起来像: 是否有可能通过mysql或我必须手动执行。 问题答案: 您可以使用 : 您可以在这里阅读更多内容。 和更新语句: 您需要用表名和列替换的地方需要更新。

  • 问题内容: 我想删除字符串的最后一个字符,但在此之前,我想检查最后一个字符是否为“ +”。如何才能做到这一点? 问题答案: 这是删除尾随加号的几种方法。 输出: