无法在Java中读取JSON文件的第一行

时间:2018-06-27 09:39:23

标签: java json mongodb csv utf-8

我正在尝试从MongoDB文档生成的JSON文件中读取一些数据。但是,当尝试读取文档中的第一个条目时,出现异常:

  

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.

根据https://jsonformatter.curiousconcept.com/,JSON文件有效。

在调试模式下,甚至可以在JSONObject中识别“ Uhrzeit”:

debug mode.

我认为这可能与条目本身有关,因此我将“基准”和“ Ort”切换到文档中的第一位,但是产生了相同的结果。

在此错误消息上还发布了许多其他信息,但在我看来,他们都遇到了稍有不同的问题。

1 个答案:

答案 0 :(得分:1)

我将包含数据的.csv导入MongoDB并从那里读取文档。在读取数据的过程中,在\ .csv中的换行符处(即每个数据集的末尾)自动生成了“ \ r”。在这种情况下,键值对为“反馈”(如上图所示)。

当使用另一个JSON验证器再次检查我的输出时,我注意到我的JSON文件中有一个"invisible" symbol,导致找不到该密钥。现在,在将.csv文档导入到我的数据库时,此符号位于第一个键的前面(在MongoDB-id之后)。我将正确版本的.csv导入到我的MongoDB中,然后再次将其导出,并且该符号再次出现。

问题是我的.csv是“ Windows”格式。将其转换为“ Unix”格式将摆脱生成的“ \ r”。 “不可见”符号是在文档开头添加的UTF-8-BOM代码。您可以将.csv重新格式化为UTF-8,然后以这种方式删除它。