嗨,我刚刚开始用巨蟒和龙卷风以及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"}}]}
如果我做错了什么,请告诉我我不知道怎么做。
JSONEncoder的实现运行良好。只要按照预期的方式使用它:
>>> JSONEncoder().encode({'data': [ObjectId(), ObjectId()]})
'{"data": ["<objId>", "<objId>"]}'
编码器将负责序列化dits、对象、列表、元组、字符串(包括Unicode)、int、long、浮动、布尔值和无。您的实现也让它知道ObjectId
s。完美!
只需丢失字符串连接并使用encode
。
那么您的问题是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类型处理都是由它构建的。
同样,没有必要在这里重新发明轮子和“滚你自己的”,因为人们已经在使用这个了。
没有理由通过文本连接来构建JSON文档。
Python在标准库中有一个非常好的json
模块,您应该使用它。将文档构建为一个Python dict列表,然后使用json。dumps()
将整个内容转换为有效的JSON。
问题内容: 我在SQL表中有一个文本备注字段,如果它是逗号,则需要删除该字段中的最后一个字符。 因此,例如,如果我有这些行,则需要从第2行和第4行中删除逗号。 输出为: 有任何想法吗? 问题答案: 使用和: 首先,您希望您的数据摆脱前导和尾随空格。然后检查第一个字符是否为。如果是的话,将其删除,否则什么也不做。然后又回来了。您可以使用删除第一个字符。 SQL小提琴
问题内容: 我正在使用循环从数据库中获取值,我的结果是: 我想要这样: 我想在循环的最后一个值后删除逗号。 问题答案: 使用功能: 第二个参数指示要删除的字符。
我将在main方法中这样做,首先实例化该类的一个对象,即。 代码示例:
问题内容: 我有一个带有这种数据的mysql表 现在我有成千上万的这样的行。我希望对数据进行某种处理,使其看起来像: 是否有可能通过mysql或我必须手动执行。 问题答案: 您可以使用 : 您可以在这里阅读更多内容。 和更新语句: 您需要用表名和列替换的地方需要更新。
它是相同的,但没有。
问题内容: 我想删除字符串的最后一个字符,但在此之前,我想检查最后一个字符是否为“ +”。如何才能做到这一点? 问题答案: 这是删除尾随加号的几种方法。 输出: