如何在不丢失 java 中的数据的情况下写入现有 json 节点?
How to write inside existing json node without loosing data in java?
我正在开发一个 java 控制台应用程序并使用 JSON 来存储数据。
这是我的查询。我想在现有节点内添加数据而不丢失数据。
我有这个节点:
{
"course" :
[
],
}
现在我想在course
里面写入新的数据,例如:
{
"course" :
[
"coursel", {
"EndDate" : "16/09/2022",
"StartDate" : "16/09/2022"
},
"course2", {
"EndDate" : "1/10/2022",
"StartDate" : "1/10/2021"
}
],
}
您可以使用 JacksonAPI 执行如下操作,
toJson = objectMapper.readTree(objectMapper.writeValueAsString(from));
添加课程对象 toJson
并保存。
请避免在您的问题中将代码片段粘贴为图片。看起来您提到的 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"
}
]
}
我正在开发一个 java 控制台应用程序并使用 JSON 来存储数据。 这是我的查询。我想在现有节点内添加数据而不丢失数据。
我有这个节点:
{
"course" :
[
],
}
现在我想在course
里面写入新的数据,例如:
{
"course" :
[
"coursel", {
"EndDate" : "16/09/2022",
"StartDate" : "16/09/2022"
},
"course2", {
"EndDate" : "1/10/2022",
"StartDate" : "1/10/2021"
}
],
}
您可以使用 JacksonAPI 执行如下操作,
toJson = objectMapper.readTree(objectMapper.writeValueAsString(from));
添加课程对象 toJson
并保存。
请避免在您的问题中将代码片段粘贴为图片。看起来您提到的 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"
}
]
}