python - 文本文件中的 "Date"应该是什么格式才能被读取为 Json,然后使用 Python 插入到 MongoDB 中?

标签 python json mongodb bson

我需要在我的代码中执行以下操作:

  • 从文本文件中读取数据
  • 将数据转成Json
  • 将数据更新到 MongoDB

下面是文本文件内容的示例:

{
   "S": "someString" <- Type String when inerted in mongodb
   "N": 123          <- Type Int32
   "F": 12.3         <- Type Double
   "D": ?            <- Need to be Type DateTime when inerted in mongodb
}

我不知道应该用什么来代替“?”所以当我在 python 中使用 bson.json_util.loads 函数时,它可以正确地将文本文件转换为 Json,稍后可以将其插入到 mongoDB 中。

这是加载和插入的代码:

with open('data.txt') as f:
    data = json_util.loads(f.read())
    db[dbName][colName].update({'_id': id}, data, upsert=True,safe=True)

如果有人能举例说明如何格式化文件,我将不胜感激。 (如果您的示例可以包含更复杂的 Bson 类型,例如类型“二进制”或“代码”,那也很好:))

最佳答案

Mongo 对日期时间的表示是 {"$date": number-of-milliseconds-since-epoch}。在你的例子中:

{
   "S": "someString",
   "N": 123,
   "F": 12.3,
   "D": {"$date": 1352540684243}
}

D 写入mongo时会生成一个datetime字段。

参见 the documentation for mongo json extensions .

您还可以轻松地扩展 json_util 来编写您自己的扩展程序,例如,用于 ISO 格式的日期时间:

import json, dateutil.parser, bson.json_util

a = """{
    "mydate": {"$isodate": "2012-11-01T20:19:55.782Z"}
}"""

def my_hook(dct):
    if '$isodate' in dct:
        return dateutil.parser.parse(dct['$isodate'])
    return bson.json_util.object_hook(dct)

obj = json.loads(a, object_hook=my_hook)

关于python - 文本文件中的 "Date"应该是什么格式才能被读取为 Json,然后使用 Python 插入到 MongoDB 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13338215/

相关文章:

java - Jackson 2.6.3 反序列化避免文字 null 添加到集合中

PHP fatal error : Property $id of class MongoId cannot be read in Unknown on line 0

javascript - MongoDB查询坐标符合一定范围的对象

python - 有没有办法用 python 启动/停止 linux 进程?

json - rjsonlite 中的 toJSON(fromJSON ('1.json' )) 不会生成相同的 JSON

具有多个条件的python lambda列表过滤

asp.net-mvc - 如何使用 PostAsJsonAsync 调用 MVC3 Controller 操作

mongodb - Robo 3T使用ssh连接mongodb

python - 在不安装 MySQL 的情况下使用 Python 查询 MySQL 数据库

python - 处理从属寄存器的异常响应 - 制造商添加的额外 'FF'