Невозможно прочитать первую строку файла JSON в Java - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь прочитать некоторые данные из файла JSON, сгенерированного из документа MongoDB. Но при попытке прочитать первую запись в документе я получаю исключение:

org.json.JSONException: JSONObject ["Uhrzeit"] не найден.

Это происходит только с первой записью, чтение других записей не вызывает исключений. Использование jsonObject.getString("") для любой записи, которая не является первой, возвращает значения, как и ожидалось.

    //Initiate Mongodb and declare the database and collection
    MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://localhost:27017"));
    MongoDatabase feedbackDb = mongoClient.getDatabase("local");
    MongoCollection<Document> feedback = feedbackDb.getCollection("RückmeldungenShort");

    //gets all documents in a collection. "new Document()" is the filter, that returns all Documents
    FindIterable<Document> documents = feedback.find(new Document());

    //Iterates over all documents and converts them to JSONObjects for further use
    for(Document doc : documents) {

        JSONObject jsonObject = new JSONObject(doc.toJson());

        System.out.print(jsonObject.toString());
        System.out.print(jsonObject.getString("Uhrzeit"));

    }

Печать jsonObject.toString() создает строку JSON для тестирования (в одну строку):

{  
   "Ort":"Elsterwerda",
   "Wetter-Keyword":"Anderes",
   "Feedback\r":"Test Gelb\r",
   "Betrag":"Gelb",
   "Datum":"18.05.2018",
   "Abweichung":"",
   "Typ":"Vorhersage",
   "_id":{  
      "$oid":"5b33453b75ef3c23f80fc416"
   },
   "Uhrzeit":"05:00"
}

Обратите внимание, что порядок, в котором появляются записи, перепутан, и первым в базе данных появился "Uhrzeit".

Вот как это выглядит:

inside the MongoDB.

Файл JSON действителен в соответствии с https://jsonformatter.curiousconcept.com/.

«Uhrzeit» даже распознается в JSONObject в режиме отладки:

debug mode.

Я предположил, что это может быть как-то связано с самими записями, поэтому я переключил «Datum» и «Ort» на первое место в документе, но это дало те же результаты.

Есть много других, которые опубликовали это сообщение об ошибке, но мне кажется, что у них всех были немного разные проблемы.

1 Ответ

0 голосов
/ 27 июня 2018

Я импортировал .csv со своими данными в MongoDB и прочитал документы оттуда. Где-то в процессе чтения данных автоматически генерировались "\ r", где разрывы строк были в моем .csv (он же в конце каждого набора данных). В этом случае у пары ключ-значение «Обратная связь» (как видно на последнем рисунке).

При повторной проверке моего вывода с помощью другого валидатора JSON я заметил, что в моем JSON-файле был «невидимый» символ , из-за которого ключ не был найден. Теперь этот символ расположен перед первым ключом (после MongoDB-id) при импорте документа .csv в мою БД. Я импортировал правильную версию .csv в мою MongoDB и экспортировал ее снова, и символ появился снова.

Проблема была в том, что мой .csv был в формате "Windows". Преобразование его в формат "Unix" избавит от сгенерированных символов "\ r". «Невидимым» символом был код UTF-8-BOM, добавляемый в начале документа. Вы можете переформатировать ваш .csv, чтобы он был просто UTF-8, и таким образом избавиться от него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...