无法读取Java中JSON文件的第一行
我试图从一个从MongoDB文档生成的JSON文件中读取一些数据。但在尝试读取文档中的第一个条目时,我遇到了一个异常: org.json.JSONException:JSONObject[“Uhrzeit”]未找到 这只发生在第一个条目上,读取其他条目不会导致异常。 对不是第一个的任何条目使用无法读取Java中JSON文件的第一行,java,json,mongodb,csv,utf-8,Java,Json,Mongodb,Csv,Utf 8,我试图从一个从MongoDB文档生成的JSON文件中读取一些数据。但在尝试读取文档中的第一个条目时,我遇到了一个异常: org.json.JSONException:JSONObject[“Uhrzeit”]未找到 这只发生在第一个条目上,读取其他条目不会导致异常。 对不是第一个的任何条目使用jsonObject.getString(“”),将返回预期的值 //Initiate Mongodb and declare the database and collection Mon
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"));
}
注意,条目出现的顺序是混淆的,数据库中出现的第一个条目是“Uhrzeit”
这就是它的样子:
JSON文件的有效性取决于
在调试模式下,JSONObject中甚至可以识别“Uhrzeit”:
我认为这可能与条目本身有关,所以我将“Datum”和“Ort”切换到文档中的第一位,但结果相同
有很多其他人在这条错误消息上发表了帖子,但在我看来,他们都有一些不同的问题。我将一个带有数据的.csv导入MongoDB,并从那里读取文档。在读取数据的过程中,会在my.csv中的换行符处自动生成“\r”(也称为每个数据集末尾的换行符)。在这种情况下,在键值对“反馈”(如上图所示) 在使用另一个JSON验证器再次检查我的输出时,我注意到我的JSON文件中存在导致找不到密钥的错误。现在,将.csv文档导入my DB时,此符号位于第一个键的前面(MongoDB id之后)。我将正确版本的.csv导入到我的MongoDB中,然后再次导出,符号再次出现
问题是我的.csv是“Windows”格式。将其转换为“Unix”格式将删除生成的“\r”。“不可见”符号是添加在文档开头的UTF-8-BOM代码。您可以将.csv重新格式化为UTF-8格式,并以这种方式将其删除。您可以迭代JSONObject中的键,看看这是否提供了任何线索吗?()嗯,在链接的第一个答案中解释的键上迭代只会打印“\u id”。我正在给它一些格式化的代码,但它似乎不起作用…使用这个:,我得到了所有的键和值。但有一个关键点不见了,这一次是“反馈”。尽管“反馈”键的值已打印。像这样:“Ort:Elsterwerda”“Wetter关键字:anders”“:Test Gelb”猜测一下,可能是反馈键中的回车字符导致了它。是否有任何方法可以删除该文件,并检查是否仍有相同的行为?从数据库中取出文档时,“\r”似乎会自动插入到文档中。这可能就是问题所在。
{
"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"
}