需要通过Java代码将.json文件插入MongoDB - java

我是初学者。我正在运行MongoDB。我的任务是通过Java代码而不是通过mongoimport将Student.json文件插入到MongoDB上。

学生.java

public class Student {

@Id
private ObjectId Id;

private long studentId;
private String studentName;
private String qualification;

public Student(){

}

public Student(long studentId, String studentName, String qualification) {
    this.studentId = studentId;
    this.studentName = studentName;
    this.qualification = qualification;
}

public long getStudentId() {
    return studentId;
}

public void setStudentId(long studentId) {
    this.studentId = studentId;
}

public String getStudentName() {
    return studentName;
}

public void setStudentName(String studentName) {
    this.studentName = studentName;
}

public String getQualification() {
    return qualification;
}

public void setQualification(String qualification) {
    this.qualification = qualification;
}
}

Student.json

[{
     "studentId": 1,
     "studentName": "Shreyas",
     "qualification": "B.E"
},
{
     "studentId": 2,
     "studentName": "Yashas",
     "qualification": "B.Tech"
}]

UpdateSudentModel.java

public class UpdateStudentModel {

private static UpdateStudentModel USM;
private StudentRepo sr;


public static void main(String[] args) {
    // TODO Auto-generated method stub

    try{

        File file = new File("/home/bshreyasrao/Student.json");


        Injector injector = Guice.createInjector(new BindingModules());
        StudentRepo sr = injector.getInstance(StudentRepo.class);

        USM = new UpdateStudentModel(sr);
        USM.importFromJsonToMongoDB(file);
        } catch (Exception e) {
        e.printStackTrace();
        System.out.println("Error while injecting/File is not present");
        }       
}

public UpdateStudentModel(StudentRepo sr)
{
    this.sr = sr;
}

public void importFromJsonToMongoDB(File file){

    try{
        JsonParser parser = new JsonFactory().createParser(file);
        ObjectMapper mapper = new ObjectMapper();
        Iterator<Student> iterator = mapper.readValues(parser, Student.class);

         while(iterator.hasNext()) {
             sr.save(iterator.next());
            }
    }catch (Exception e) {
        e.printStackTrace();
        System.out.println("Error While parsing data");
    }
}
}

错误

com.fasterxml.jackson.databind.RuntimeJsonMappingException: Can not deserialize instance of com.shreyas.student.model.Student out of START_ARRAY token
 at [Source: /home/bshreyasrao/Student.json; line: 1, column: 1]
    at com.fasterxml.jackson.databind.MappingIterator.next(MappingIterator.java:194)
    at com.shreyas.student.UpdateStudentModel.importFromJsonToMongoDB(UpdateStudentModel.java:55)
    at com.shreyas.student.UpdateStudentModel.main(UpdateStudentModel.java:34)
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of com.shreyas.student.model.Student out of START_ARRAY token
 at [Source: /home/bshreyasrao/Student.json; line: 1, column: 1]
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:216)
    at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:873)
    at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:869)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromArray(BeanDeserializerBase.java:1293)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:159)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:135)
    at com.fasterxml.jackson.databind.MappingIterator.nextValue(MappingIterator.java:277)
    at com.fasterxml.jackson.databind.MappingIterator.next(MappingIterator.java:192)
    ... 2 more
Error While parsing data

我尝试过的事情

在Student.json中,如果我删除分隔两个json对象的“ [”,“]”和“,”,则我上面的代码UpdateStudentModel.java可以正常工作。

{"studentId": 1,"studentName": "Shreyas","qualification": "B.E"}
{"studentId": 2,"studentName": "Yashas","qualification": "B.Tech"}

我知道这不是有效的JSON格式。

因此,为了成功使用有效的JSON文件,我应如何处理这些“ [”,“]”和“,”?
我应该在代码中进行哪些更改?.. pls请在这方面帮助我。

参考方案

在您的代码中,您需要一个Student对象。但是您的JSON是Student数组。您可以尝试按期望的JSON数组更改代码吗?

更改此行:

Iterator<Student> iterator = mapper.readValues(parser, Student.class);

如下:

Student[] iterator = mapper.readValues(parser, Student[].class);

要么

List<Student> iterator = mapper.readValues(parser, new TypeReference<List<Student>>.class);

Java-搜索字符串数组中的字符串 - java

在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…

Java RegEx中的单词边界\ b - java

我在使用\b作为Java Regex中的单词定界符时遇到困难。对于text = "/* sql statement */ INSERT INTO someTable"; Pattern.compile("(?i)\binsert\b");找不到匹配项Pattern insPtrn = Pattern.compile(&…

Java Double与BigDecimal - java

我正在查看一些使用双精度变量来存储(360-359.9998779296875)结果为0.0001220703125的代码。 double变量将其存储为-1.220703125E-4。当我使用BigDecimal时,其存储为0.0001220703125。为什么将它双重存储为-1.220703125E-4? 参考方案 我不会在这里提及精度问题,而只会提及数字…

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …