GSON 라이브러리를 사용하여 Java 객체를 JSON 객체로 변환하는 단계 인스턴스 상세 정보
12094 단어 GSON
[{"tableName":"students","tableData":[{"id":1,"name":" ","birthDay":"Jun 22, 2012 9:54:49 PM"},{"id":2,"name":" ","birthDay":"Jun 22, 2012 9:54:49 PM"},{"id":3,"name":" ","birthDay":"Jun 22, 2012 9:54:49 PM"}]},{"tableName":"teachers","tableData":[{"id":1,"name":" ","title":" "},{"id":2,"name":" ","title":" "}]}]
분석한 후에 우리는 일반적인 방식이 위의 json열을 처리하기 어렵다는 것을 발견했다.본문이 어떻게 처리되었는지 보십시오.엔티티 클래스:
import java.util.Date;
public class Student {
private int id;
private String name;
private Date birthDay;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthDay() {
return birthDay;
}
public void setBirthDay(Date birthDay) {
this.birthDay = birthDay;
}
@Override
public String toString() {
return "Student [birthDay=" + birthDay + ", id=" + id + ", name="
+ name + "]";
}
}
public class Teacher {
private int id;
private String name;
private String title;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public String toString() {
return "Teacher [id=" + id + ", name=" + name + ", title=" + title
+ "]";
}
}
여기서 TableData 엔티티 클래스를 정의합니다.
import java.util.List;
public class TableData {
private String tableName;
private List tableData;
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public List getTableData() {
return tableData;
}
public void setTableData(List tableData) {
this.tableData = tableData;
}
}
테스트 클래스:(자세히 보면 json을 대상으로 전환하는 실현을 보면 여기서 두 번의 전환을 거쳐 첫 번째 전환의 결과는 맵이 우리가 기대하는 대상이 아니라는 것이다. 맵에 대해 다시 json으로 전환한 후에 대상으로 전환한다. 내가 인용한 것은 Gson2.1의jar 처리가 정상적이다. 마치 Gson1.6의jar를 사용하면 오류를 보고할 수 있기 때문에 최신 버전을 사용하는 것을 권장한다.)
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class GsonTest5 {
/**
* @param args
*/
public static void main(String[] args) {
// Json-->start
Student student1 = new Student();
student1.setId(1);
student1.setName(" ");
student1.setBirthDay(new Date());
Student student2 = new Student();
student2.setId(2);
student2.setName(" ");
student2.setBirthDay(new Date());
Student student3 = new Student();
student3.setId(3);
student3.setName(" ");
student3.setBirthDay(new Date());
List<Student> stulist = new ArrayList<Student>();
stulist.add(student1);
stulist.add(student2);
stulist.add(student3);
Teacher teacher1 = new Teacher();
teacher1.setId(1);
teacher1.setName(" ");
teacher1.setTitle(" ");
Teacher teacher2 = new Teacher();
teacher2.setId(2);
teacher2.setName(" ");
teacher2.setTitle(" ");
List<Teacher> teacherList = new ArrayList<Teacher>();
teacherList.add(teacher1);
teacherList.add(teacher2);
TableData td1 = new TableData();
td1.setTableName("students");
td1.setTableData(stulist);
TableData td2 = new TableData();
td2.setTableName("teachers");
td2.setTableData(teacherList);
List<TableData> tdList = new ArrayList<TableData>();
tdList.add(td1);
tdList.add(td2);
Gson gson = new Gson();
String s = gson.toJson(tdList);
System.out.println(s);
// :[{"tableName":"students","tableData":[{"id":1,"name":" ","birthDay":"Jun 22, 2012 10:44:16 AM"},{"id":2,"name":" ","birthDay":"Jun 22, 2012 10:44:16 AM"},{"id":3,"name":" ","birthDay":"Jun 22, 2012 10:44:16 AM"}]},{"tableName":"teachers","tableData":[{"id":1,"name":" ","title":" "},{"id":2,"name":" ","title":" "}]}]
// Json-->end
// /////////////////////////////////////////////////////////////////////
// json -->start
List<TableData> tableDatas2 = gson.fromJson(s,
new TypeToken<List<TableData>>() {
}.getType());
for (int i = 0; i < tableDatas2.size(); i++) {
TableData entityData = tableDatas2.get(i);
String tableName = entityData.getTableName();
List tableData = entityData.getTableData();
String s2 = gson.toJson(tableData);
// System.out.println(s2);
// System.out.println(entityData.getData());
if (tableName.equals("students")) {
System.out.println("students");
List<Student> retStuList = gson.fromJson(s2,
new TypeToken<List<Student>>() {
}.getType());
for (int j = 0; j < retStuList.size(); j++) {
System.out.println(retStuList.get(j));
}
} else if (tableName.equals("teachers")) {
System.out.println("teachers");
List<Teacher> retTchrList = gson.fromJson(s2,
new TypeToken<List<Teacher>>() {
}.getType());
for (int j = 0; j < retTchrList.size(); j++) {
System.out.println(retTchrList.get(j));
}
}
}
// Json -->end
}
}
출력 결과:
[{"tableName":"students","tableData":[{"id":1,"name":" ","birthDay":"Jun 22, 2012 10:04:12 PM"},{"id":2,"name":" ","birthDay":"Jun 22, 2012 10:04:12 PM"},{"id":3,"name":" ","birthDay":"Jun 22, 2012 10:04:12 PM"}]},{"tableName":"teachers","tableData":[{"id":1,"name":" ","title":" "},{"id":2,"name":" ","title":" "}]}]
students
Student [birthDay=Fri Jun 22 22:04:12 CST 2012, id=1, name= ]
Student [birthDay=Fri Jun 22 22:04:12 CST 2012, id=2, name= ]
Student [birthDay=Fri Jun 22 22:04:12 CST 2012, id=3, name= ]
teachers
Teacher [id=1, name= , title= ]
Teacher [id=2, name= , title= ]
TypeAdapter 등록 및 Enum 유형 처리매거 유형은 우리 프로그램에 좋은 점을 가져다 주었는데, 어떻게 Gson으로 Json과의 상호작용을 실현합니까?본문을 보십시오.
본고는 TypeAdapter를 직접 작성하고 TypeAdapter를 등록하고 Enum 유형을 처리하는 방법을 중점적으로 파악합니다.
엔티티 클래스:
public enum PackageState {
PLAY, UPDATE, UPDATING, DOWNLOAD, DOWNLOADING,
}
public class PackageItem {
private String name;
private PackageState state;
private String size;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public PackageState getState() {
return state;
}
public void setState(PackageState state) {
this.state = state;
}
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
@Override
public String toString() {
return "PackageItem [name=" + name + ", size=" + size + ", state="
+ state + "]";
}
}
직접 변환기를 써서 Json Serializer
import java.lang.reflect.Type;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
public class EnumSerializer implements JsonSerializer<PackageState>,
JsonDeserializer<PackageState> {
// Json , JsonSerializer<PackageState>
@Override
public JsonElement serialize(PackageState state, Type arg1,
JsonSerializationContext arg2) {
return new JsonPrimitive(state.ordinal());
}
// json , JsonDeserializer<PackageState>
@Override
public PackageState deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
if (json.getAsInt() < PackageState.values().length)
return PackageState.values()[json.getAsInt()];
return null;
}
}
테스트 클래스:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class GsonTest6 {
public static void main(String[] args) {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(PackageState.class,
new EnumSerializer());
Gson gson = gsonBuilder.create();
PackageItem item = new PackageItem();
item.setName("item_name");
item.setSize("500M");
item.setState(PackageState.UPDATING);// state
String s = gson.toJson(item);
System.out.println(s);
System.out.println("--------------------------------");
PackageItem retItem = gson.fromJson(s, PackageItem.class);
System.out.println(retItem);
}
}
결과 출력 (결과에서 state의 매개 형식을 int 형식으로 바꿨습니다):
{"name":"item_name","state":2,"size":"500M"}
--------------------------------
PackageItem [name=item_name, size=500M, state=UPDATING]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
예를 들어 Java의 JSON 라이브러리 GSON의 기본 사용법을 설명합니다.GSON이라는 자바 라이브러리는 자바 대상을 JSON으로 변환할 수도 있고, JSON 문자열을 같은 자바 대상으로 변환할 수도 있다.Gson은 소스 코드가 없는 모든 복잡한 Java 객체를 지원합니다. 다른 json...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.