Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法读取Java中JSON文件的第一行_Java_Json_Mongodb_Csv_Utf 8 - Fatal编程技术网

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

无法读取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

我试图从一个从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"));

    }
注意,条目出现的顺序是混淆的,数据库中出现的第一个条目是“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"
}