Python MongoDB 日期时间 json
Python MongoDB datatime in json
我正在尝试将 mongo 数据作为 json 数据加载到我的 Django 应用程序中。
为此,我使用了这个示例数据:
mydict = {
"startsAt": {
"time": {
"date": datetime.datetime.today() - timedelta(days = 1) + timedelta(hours = i)
},
"valid": True
}
我正在我的 mongo 数据库中插入以上数据:
我正在尝试使用以下方法将此数据加载到 json:
def filterRegistration():
sreialise_mongo = json_util.dumps(mycol.find(),indent=4, sort_keys=True, default=default)
page_sanitized = json.loads(sreialise_mongo)
return sreialise_mongo
在 Django 中,我使用以下方法加载此数据:
@api_view(['GET'])
def test(request):
return Response({"message": filterRegistration()})
我得到了这样的 json 数据:
"startsAt": {
"time": {
"date": {
"$date": 1612775312481
}
},
"valid": true
我想要这样的数据:
"startsAt": {
"time": {
"date": "2021-01-18T06:21:34.677Z"
},
"valid": true
我在类似问题中尝试了几种方法。但是我找不到解决方案。
有点麻烦,但你必须将 json 选项中的 DatetimeRepresentation
选项设置为 DatetimeRepresentation.ISO8601
。 Documentation..
它仍然把它放在“$date”字段中,但您围绕它进行编码。
import pymongo
import datetime
from bson.json_util import dumps, JSONOptions, DatetimeRepresentation
client = pymongo.MongoClient()
db = client['mydatabase']
mycol = db.mycol
i = 1
mycol.insert_one({
"startsAt": {
"time": {
"date": datetime.datetime.today() - datetime.timedelta(days=1) + datetime.timedelta(hours=i)
},
"valid": True
}})
def filterRegistration():
json_options = JSONOptions()
json_options.datetime_representation = DatetimeRepresentation.ISO8601
serialise_mongo = dumps(mycol.find(), indent=4, sort_keys=True, json_options=json_options)
return serialise_mongo
print(filterRegistration())
给出:
[
{
"_id": {
"$oid": "602133589ebd83ba93ec1583"
},
"startsAt": {
"time": {
"date": {
"$date": "2021-02-07T13:49:28.512Z"
}
},
"valid": true
}
}
]
我正在尝试将 mongo 数据作为 json 数据加载到我的 Django 应用程序中。
为此,我使用了这个示例数据:
mydict = {
"startsAt": {
"time": {
"date": datetime.datetime.today() - timedelta(days = 1) + timedelta(hours = i)
},
"valid": True
}
我正在我的 mongo 数据库中插入以上数据:
我正在尝试使用以下方法将此数据加载到 json:
def filterRegistration():
sreialise_mongo = json_util.dumps(mycol.find(),indent=4, sort_keys=True, default=default)
page_sanitized = json.loads(sreialise_mongo)
return sreialise_mongo
在 Django 中,我使用以下方法加载此数据:
@api_view(['GET'])
def test(request):
return Response({"message": filterRegistration()})
我得到了这样的 json 数据:
"startsAt": {
"time": {
"date": {
"$date": 1612775312481
}
},
"valid": true
我想要这样的数据:
"startsAt": {
"time": {
"date": "2021-01-18T06:21:34.677Z"
},
"valid": true
我在类似问题中尝试了几种方法。但是我找不到解决方案。
有点麻烦,但你必须将 json 选项中的 DatetimeRepresentation
选项设置为 DatetimeRepresentation.ISO8601
。 Documentation..
它仍然把它放在“$date”字段中,但您围绕它进行编码。
import pymongo
import datetime
from bson.json_util import dumps, JSONOptions, DatetimeRepresentation
client = pymongo.MongoClient()
db = client['mydatabase']
mycol = db.mycol
i = 1
mycol.insert_one({
"startsAt": {
"time": {
"date": datetime.datetime.today() - datetime.timedelta(days=1) + datetime.timedelta(hours=i)
},
"valid": True
}})
def filterRegistration():
json_options = JSONOptions()
json_options.datetime_representation = DatetimeRepresentation.ISO8601
serialise_mongo = dumps(mycol.find(), indent=4, sort_keys=True, json_options=json_options)
return serialise_mongo
print(filterRegistration())
给出:
[
{
"_id": {
"$oid": "602133589ebd83ba93ec1583"
},
"startsAt": {
"time": {
"date": {
"$date": "2021-02-07T13:49:28.512Z"
}
},
"valid": true
}
}
]