Как писать внутри существующего узла json без потери данных в java?
2 ответа
Решение
Не вставляйте фрагмент кода в качестве изображения в свой вопрос. Похоже, что указанная вами структура 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"
}
]
}
вы можете сделать что-то вроде ниже, используя JacksonAPI,
toJson = objectMapper.readTree(objectMapper.writeValueAsString(от));
Добавьте объект курса в Json и сохраните его.