【问题标题】:Error accessing json object fields after bson document fetched from MongoDB via pymongo and converted to json在通过 pymongo 从 MongoDB 获取 bson 文档并转换为 json 后访问 json 对象字段时出错
【发布时间】:2015-01-04 08:20:11
【问题描述】:

我看过很多关于在 pymongo 中进行 MongoDB 查询后返回的 bson 文档转换为 json 的帖子。

就我而言,我从存储在 MongoDB 中的 Cuckoo 分析结果中获取了一个文档。我可以访问并打印该 bson 文档中的特定字段。但是,在使用 bson 中的 json_util 将其转换为 json 并尝试访问同一字段后,我收到错误消息。使用对象还有什么事情要做吗?

代码如下:

from pymongo import MongoClient
from bson.json_util import dumps, default

<...pymongo code for connecting to MongoDB server...>

result_cursor = analysis.find({"info.id": 1770}, {"behavior.summary": 1})
for doc in result_cursor:
    print doc["behavior"]
    doc_json = dumps(doc, default=default)
    print doc_json["behavior"]

从上面的代码中,第一个打印工作正常,但最后一个触发异常,因为我认为它将对象视为列表而不是字典:

{u'summary': {u'files': .....}}

Traceback(最近一次调用最后一次):文件 "C:/Users/itisnobody/PycharmProjects/mongo-cuckoo/mongodb-cuckoo.py", 第 42 行,在 print doc_json["behavior"] TypeError: string indices must be integers, not str

【问题讨论】:

  • 当我得到对象的类名时,doc对象是dict,doc_json对象是str。为什么会这样?

标签: python json mongodb pymongo bson


【解决方案1】:

bson.json_util.dumps 将您的文档转换为 JSON 字符串(转储是“转储字符串”的缩写)。

您似乎正在尝试创建“JSON dict”,但您的文档 (doc) 正是如此。我的猜测是你可以完全跳过dumps,直接使用doc

【讨论】:

  • 谢谢,你说得对,我不需要把它转成JSON dict,因为它已经是一个dict了。
猜你喜欢
  • 1970-01-01
  • 2015-07-31
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
  • 2018-02-21
  • 2015-09-27
  • 1970-01-01
相关资源
最近更新 更多