Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python JSON库如何处理时间?_Python_Json_Mongodb_Pymongo - Fatal编程技术网

Python JSON库如何处理时间?

Python JSON库如何处理时间?,python,json,mongodb,pymongo,Python,Json,Mongodb,Pymongo,所以我现在正在学习MongoDB,我使用的是PyMongo而不是MongoDB shell 当我开始尝试基本的CRUD操作时,我发现很难使用PyMongo加载bios数据,因为发布在上的原始数据有一个奇怪的ISODATA时间 原始pythonJSON库似乎不支持此功能,而mongoimport似乎也不支持此功能(不确定)。但我发现,在修改成{$date:“2017-04-01T05:00:00Z”}后,mongoimport开始工作 现在我正在使用子流程调用外部命令来导入数据。所以我的问题是,如

所以我现在正在学习MongoDB,我使用的是PyMongo而不是MongoDB shell

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

原始python
JSON
库似乎不支持此功能,而
mongoimport
似乎也不支持此功能(不确定)。但我发现,在修改成
{$date:“2017-04-01T05:00:00Z”}
后,
mongoimport
开始工作

现在我正在使用
子流程
调用外部命令来导入数据。所以我的问题是,如何使用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库解析它时,我得到一条错误消息
JSON.decoder.jsondecoderror
,因为
“出生”:ISODate(“1924-12-03T05:00:00Z”),
。由于同样的原因,
mongoimport
无法解析此内容

当我修改时

“出生”:ISODate(“1924-12-03T05:00:00Z”),

“出生”:$date:“2017-04-01T05:00:00Z”

mongoimport
正在工作,但python仍然无法解析它


这里我要问的是一种在Python和PyMongo中解决这个问题的方法,而不是调用外部命令。

您正在查看的示例可能是打算在mongo shell中使用的,在mongo shell中可以解析ISODate bson类型的使用,如图所示

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

为了在Python/PyMongo中使用扩展JSON,可以使用

下面是一个简单的例子:

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)

请分享一个你是如何尝试使用pymongo插入数据的例子。这正是我想要的!谢谢。但是您如何处理
“\u id”:ObjectId(“42”)
?,它是
“\u id”:{“ObjectId”:“42”}
?我发现我的方法似乎不对。我在我引用的页面上看到了