Как прочитать файл JSON, содержащий ObjectId и ISODate в Python? - PullRequest
0 голосов
/ 05 октября 2018

Я хочу прочитать файл JSON, который содержит ObjectId и ISODate.

ДАННЫЕ JSON:

{
    "_id" : ObjectId("5baca841d25ce14b7d3d017c"),
    "country" : "in",
    "state" : "",
    "date" : ISODate("1902-01-31T00:00:00.000Z")
}

1 Ответ

0 голосов
/ 04 июля 2019

У меня такая же проблема, и пакет bson помог бы, только если у вас уже были данные типа dict.

Если у вас уже есть данные в dict, вы можете преобразовать их вjson вот так ( ссылка ):

from bson import json_util
import json

resulting_json = json.dumps(your_dict, default=json_util.default)

Если у вас есть строка, bson не поможет.Поэтому я просто удалил объекты, сделал строгую строку json и преобразовал в dict:

import json
import re

#This will outputs a iterator that converts each file line into a dict.
def readBsonFile(filename):
    with open(filename, "r") as data_in:
        for line in data_in:
            # convert the TenGen JSON to Strict JSON
            jsondata = re.sub(r'\:\s*\S+\s*\(\s*(\S+)\s*\)',
                              r':\1',
                              line)

            # parse as JSON
            line_out = json.loads(jsondata)

            yield line_out

Файл с таким:

{ "_id" : ObjectId("5baca841d25ce14b7d3d017c"), "country" : "in", "state" : "", "date" : ISODate("1902-01-31T00:00:00.000Z")}

выведет этот dict:

     {  "_id" : "5baca841d25ce14b7d3d017c",
        "country" : "in",
        "state" : "",
        "date" : "1902-01-31T00:00:00.000Z"}
...