【发布时间】:2018-06-27 09:39:22
【问题描述】:
我正在尝试从我从 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”。
看起来是这样的:
JSON文件根据https://jsonformatter.curiousconcept.com/有效。
在调试模式下,甚至可以在 JSONObject 中识别“Uhrzeit”:
我认为这可能与条目本身有关,因此我将“Datum”和“Ort”切换到文档中的第一位,但产生了相同的结果。
还有很多其他人发布了此错误消息,但在我看来,他们的问题略有不同。
【问题讨论】:
-
您能否遍历 JSONObject 中的键并查看是否提供任何线索? (stackoverflow.com/questions/9151619/…)
-
好吧,如链接中第一个答案中所述,遍历键只会打印“_id”。我正在努力为此提供一些格式化的代码,但它似乎不起作用......
-
使用这个:stackoverflow.com/a/32412500/9977047,我得到了所有的键和值。但是缺少一个关键,这次是“反馈”。尽管打印了“反馈”键的值。像这样:“Ort:Elsterwerda”“Wetter-Keyword:Anderes”“:Test Gelb”
-
猜测,可能是反馈键中的回车符导致了问题。有什么方法可以删除它并检查您是否仍然得到相同的行为?
-
“\r”似乎在从数据库中取出时自动插入到文档中。这可能是问题所在。
标签: java json mongodb csv utf-8