pythonjson库如何处理时间?

2024-04-19 17:57:49 发布

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

所以我现在正在学习MongoDB,我使用的是PyMongo而不是MongoDB shell。你知道吗

当我开始尝试基本的CRUD操作时,我发现很难使用PyMongo加载bios数据,因为发布在website上的原始数据对time有一个奇怪的ISODATA。你知道吗

最初的python JSON库似乎不支持这个,而mongoimport似乎也不支持这个(不确定)。但是我发现this,在修改成{$date:"2017-04-01T05:00:00Z"}之后,mongoimport起作用了。你知道吗

现在我正在使用subprocess调用外部命令来导入数据。所以我的问题是,如何使用python正确读取JSON数据并使用PyMongo插入数据。你知道吗

细节

mongodb文档中的bios数据如下所示

{
"_id" : 1,
"name" : {
    "first" : "John",
    "last" : "Backus"
},
"birth" : ISODate("1924-12-03T05:00:00Z"),
"death" : ISODate("2007-03-17T04:00:00Z"),
"contribs" : [
    "Fortran",
    "ALGOL",
    "Backus-Naur Form",
    "FP"
],
"awards" : [
    {
        "award" : "W.W. McDowell Award",
        "year" : 1967,
        "by" : "IEEE Computer Society"
    },
    {
        "award" : "National Medal of Science",
        "year" : 1975,
        "by" : "National Science Foundation"
    },
    {
        "award" : "Turing Award",
        "year" : 1977,
        "by" : "ACM"
    },
    {
        "award" : "Draper Prize",
        "year" : 1993,
        "by" : "National Academy of Engineering"
    }
]
}

当我尝试用Python的JSON库解析它时,由于"birth" : ISODate("1924-12-03T05:00:00Z"),,我得到了一条错误消息json.decoder.JSONDecodeError。因为同样的原因,mongoimport不能解析这个。你知道吗

当我修改的时候

"birth" : ISODate("1924-12-03T05:00:00Z"),进入

"birth" : $date:"2017-04-01T05:00:00Z"

mongoimport正在工作,但python仍然无法解析它。你知道吗

这里我要问的是如何在Python和PyMongo中处理这个问题,而不是调用外部命令。你知道吗


Tags: 数据外部命令jsondatebymongodbyearbirth
1条回答
网友
1楼 · 发布于 2024-04-19 17:57:49

您所看到的示例可能是打算在mongo shell中使用的,在mongo shell中可以解析ISODate bson类型的用法,如图所示。你知道吗

除此之外,我们面临的挑战是JSON没有日期数据类型,也没有表示日期的标准方式。为了应对这个挑战,MongoDB创建了一个名为Extended JSON的东西,它可以用JSON对日期进行编码,类似于用$date显示的方式。你知道吗

为了在Python/PyMongo中使用扩展的JSON,可以使用json_util。你知道吗

下面是一个简单的例子:

from bson.json_util import loads
from pymongo import MongoClient

json = '''
{
    "_id" : 1,
    "name" : {
        "first" : "John",
        "last" : "Backus"
    },
    "birth" : {"$date":"2017-04-01T05:00:00.000Z"},
    "death" : {"$date":"2017-04-01T05:00:00.000Z"}
}
'''

bson = loads(json)
print(str(bson))
db = MongoClient().test
collection = db.bios
collection.insert(bson)

相关问题 更多 >