-3

我正在开发一个 java 控制台应用程序并使用 JSON 来存储数据。这是我的查询。我想在现有节点内添加数据而不会丢失数据。

我有这个节点:

{
  "course" :
    [

    ],
}

现在我想在里面写入新数据course,例如:

{
  "course" :
    [
      "coursel", {
        "EndDate" : "16/09/2022",
        "StartDate" : "16/09/2022"
       },
       "course2", {
        "EndDate" : "1/10/2022",
        "StartDate" : "1/10/2021"
       }
    ],
}
4

2 回答 2

1

请避免在您的问题中粘贴代码片段作为图像。看起来你提到的 json 结构是无效的。请参考下面的代码。

实际Json(运行程序之前):

{
  "course": [
    {
      "course": "course1",
      "StartDate": "16/09/2021",
      "EndDate": "16/09/2022"
    },
    {
      "course": "course2",
      "StartDate": "01/10/2021",
      "EndDate": "01/10/2022"
    }
  ]
}

源代码:

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;

public class SO2 {


    public static void main(String[] args) {

        List<CourseDetail> courseList = new ArrayList<>();
        courseList.add(new CourseDetail("course3", "09/09/2021", "09/09/2022"));

        writeCourseList(courseList, "/Users/MyiCloud/Documents/Java/MavenOfflineMode/json", "courses.json");
    }

    public static void writeCourseList(List<CourseDetail> courseList, String path, String fileName) {
        Course course = null;
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            byte[] jsonData = Files.readAllBytes(Paths.get(path + File.separator + fileName));
            course = objectMapper.readValue(jsonData, Course.class);

            List<CourseDetail> existingCourseList = course.getCourseList();
            if(null != existingCourseList && existingCourseList.size() > 0) {
                courseList.forEach(newCourse -> existingCourseList.add(newCourse));
                course.setCourseList(existingCourseList);
            } else {
                course.setCourseList(courseList);
            }
            objectMapper.writeValue(new File(path + File.separator + fileName), course);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

class Course {
    @JsonProperty("course")
    private List<CourseDetail> courseList = new ArrayList<>();

    public List<CourseDetail> getCourseList() {
        return courseList;
    }

    public void setCourseList(List<CourseDetail> courseList) {
        this.courseList = courseList;
    }
}

class CourseDetail {

    @JsonProperty("course")
    private String courseName;
    @JsonProperty("StartDate")
    private String startDate;
    @JsonProperty("EndDate")
    private String endDate;


    public CourseDetail() {
    }

    public CourseDetail(String courseName, String startDate, String endDate) {
        this.courseName = courseName;
        this.startDate = startDate;
        this.endDate = endDate;
    }

    public String getCourseName() {
        return courseName;
    }

    public void setCourseName(String courseName) {
        this.courseName = courseName;
    }

    public String getStartDate() {
        return startDate;
    }

    public void setStartDate(String startDate) {
        this.startDate = startDate;
    }

    public String getEndDate() {
        return endDate;
    }

    public void setEndDate(String endDate) {
        this.endDate = endDate;
    }

}

Json(运行代码后):

{
  "course": [
    {
      "course": "course1",
      "StartDate": "16/09/2021",
      "EndDate": "16/09/2022"
    },
    {
      "course": "course2",
      "StartDate": "01/10/2021",
      "EndDate": "01/10/2022"
    },
    {
      "course": "course3",
      "StartDate": "09/09/2021",
      "EndDate": "09/09/2022"
    }
  ]
}
于 2021-09-10T10:45:51.643 回答
0

您可以使用 JacksonAPI 执行以下操作,

toJson = objectMapper.readTree(objectMapper.writeValueAsString(from));

添加课程对象toJson并保存。

于 2021-09-10T10:26:05.880 回答