Я получаю сообщение об ошибке при попытке импортировать файл JSON в MongoDB через Compass - PullRequest
0 голосов
/ 29 мая 2020

У меня Windows 10. Недавно я получил большой файл JSON (200 МБ) через веб-сканирование, и теперь я пытаюсь импортировать файл в MongoDB с помощью Compass Community с помощью кнопки импорта данных. Однако всякий раз, когда я пытаюсь импортировать файл, я получаю следующую ошибку:

Unexpected token l in JSON at position 0 while parsing near 'l

Вот несколько первых строк файла JSON, который я пытаюсь импортировать:

{
    "bands": [{
            "activity": "Split-up",
            "bandMembers": ["https://www.metal-archives.com/artists/Jon_Powlowski/760544", "https://www.metal-archives.com/artists/Ruben_Martinez/760545", "https://www.metal-archives.com/artists/Greg_Eickmier/416646", "https://www.metal-archives.com/artists/Nedwob/471955"],
            "bandName": "A // Solution",
            "country": "United States",
            "dateAdded": "2018-08-04",
            "genre": "Crust Punk/Thrash Metal",
            "label": {
                "labelName": "Voltic Records",
                "labelUrl": "https://www.metal-archives.com/labels/Voltic_Records/47794"
            },
            "location": "California",
            "lyricalThemes": "N/A",
            "releases": [{
                    "numReviews": 0,
                    "releaseName": "Butterfly",
                    "reviewAverage": null,
                    "type": "EP",
                    "url": "https://www.metal-archives.com/albums/A_--_Solution/Butterfly/723154",
                    "year": "1989"
                }, {
                    "numReviews": 0,
                    "releaseName": "Things to Come",
                    "reviewAverage": null,
                    "type": "EP",
                    "url": "https://www.metal-archives.com/albums/A_--_Solution/Things_to_Come/723155",
                    "year": "1995"
                }
            ],
            "similarArtists": null,
            "url": "https://www.metal-archives.com/bands/A_--_Solution/3540442600",
            "yearFormed": "N/A",
            "yearsActive": "N/A"
        }, {
            "activity": "Active",

Кто-нибудь знает, как я могу исправить эту ошибку?

РЕДАКТИРОВАТЬ: Я снова выполнил импорт после перезапуска Compass и получил следующее:

Unexpected token : in JSON at position 0 while parsing near ': null,

Связана ли эта ошибка с другой?

1 Ответ

0 голосов
/ 16 июля 2020

Кнопка импорта данных требует, чтобы объект был встроен в соответствии с https://docs.mongodb.com/compass/master/import-export/#import -data-into-a-collection .

Кроме того, у меня были проблемы с «Неожиданно token: in JSON at position 0 ", и даже хотя я еще не мог понять причину, я попытался создать новый. json и скопировать в него содержимое, и, что удивительно, это сработало.

Также не забудьте оставить разрыв строки в конце файла.

Чтобы преобразовать json в однострочный формат, вы можете использовать следующий python скрипт:

import json
import sys
import codecs
import os


def read_file(name):
    with open(name, encoding='utf8') as f:
        return f.read()


def write_file(name, text):
    os.makedirs(os.path.dirname(name), exist_ok=True)
    with codecs.open(name, "w", "utf-8-sig") as temp:
        temp.writelines(text)


text = read_file(sys.argv[1])
data = json.loads(text)

result = json.dumps(text, ensure_ascii=False) + "\n"

write_file(sys.argv[2], result)
...