자바 의 Gson 사용 에 대한 자세 한 설명
1.Gson 의 기본 용법
Gson 은 from JSon()과 toJSon()두 가지 직접 해석 과 생 성 에 사용 하 는 방법 을 제공 했다.전 자 는 반 직렬 화 를 실현 하고 후 자 는 직렬 화 를 실현 했다.동시에 모든 방법 은 과부하 방법 을 제공 했다.
(1)기본 데이터 형식의 해석
Gson gson = new Gson();
int i = gson.fromJson("100", int.class); //100
double d = gson.fromJson("\"99.99\"", double.class); //99.99
boolean b = gson.fromJson("true", boolean.class); // true
String str = gson.fromJson("String", String.class); // String
(2)기본 데이터 형식의 생 성
Gson gson = new Gson();
String jsonNumber = gson.toJson(100); // 100
String jsonBoolean = gson.toJson(false); // false
String jsonString = gson.toJson("String"); //"String"
(3)POJO 류 의 생 성과 해석
public class User {
//
public String name;
public int age;
public String emailAddress;
}
JSON 생 성:
Gson gson = new Gson();
User user = new User(" ",24);
String jsonObject = gson.toJson(user); // {"name":" kidou","age":24}
JSON 해석:
Gson gson = new Gson();
String jsonString = "{\"name\":\" \",\"age\":24}";
User user = gson.fromJson(jsonString, User.class);
2.속성 이름 바 꾸 기@SerializedName 주석 사용위의 POJO 의 생 성과 해석 을 통 해 알 수 있 듯 이 json 의 필드 와 값 은 이름과 유형 이 일일이 대응 하지만 어느 정도 잘못 사용 하 는 메커니즘 도 있다(예 를 들 어 첫 번 째 예 3 줄 에서 문자열 의 99.99 를 double 형 으로 바 꾸 는 것).그러나 가끔 은 조 화 롭 지 못 한 상황 도 발생 한다.예 를 들 어:
원 하 는 json 형식:{"name":"장삼","age":24,"emailAddress":"[email protected]"}
실제:{"name":"장삼","age":24,"emailaddress":"[email protected]"}
Gson 은 직렬 화 와 역 직렬 화 를 할 때 반 사 를 사용 해 야 합 니 다.일반적으로 각 라 이브 러 리 는 주석 을 annotations 가방 에 넣 고 소스 코드 를 열 면 com.google.gson 가방 아래 에 annotations 가 있 습 니 다.그 안에 Serialized Name 의 주석 류 가 있 습 니 다.json 에서 emailaddress 이 속성 은 POJO 에 대응 하 는 속성 은 다음 과 같 습 니 다.
@SerializedName("email_address")
public String emailAddress;
POJO 필드 에 예비 속성 이름 을 제공 합 니 다:SerializedName 설명 은 두 개의 속성 을 제공 합 니 다.그 위 에 하 나 를 사 용 했 습 니 다.다른 속성 alternate 도 있 습 니 다.String 배열 을 받 습 니 다.주:alternate 는 2.4 버 전이 필요 합 니 다.
@SerializedName(value = "emailAddress", alternate = {"email", "email_address"})
public String emailAddress;
// (email_address、email、emailAddress)
// , 。
Gson gson = new Gson();
String json = "{\"name\":\" kidou\",\"age\":24,\"emailAddress\":\"[email protected]\",\"email\":\"[email protected]\",\"email_address\":\"[email protected]\"}";
User user = gson.fromJson(json, User.class);
System.out.println(user.emailAddress); // [email protected]
3.Gson 에서 범 형 을 사용한다.예 를 들 어 JSON 문자열 배열:["Android","Java","PHP"]
Gson 을 통 해 이 json 을 분석 하려 면 보통 두 가지 방식 이 있 습 니 다.배열 을 사용 하고 List 를 사용 합 니 다.한편,List 는 첨삭 에 비교적 편리 하기 때문에 실제 사용 은 List 가 비교적 많다.
배열 이 비교적 간단 합 니 다:
Gson gson = new Gson();
String jsonArray = "[\"Android\",\"Java\",\"PHP\"]";
String[] strings = gson.fromJson(jsonArray, String[].class);
List 에서 위의 코드 중의 String[].class 를 ListGson 은 위의 문 제 를 해결 하기 위해 TypeToken 을 제공 하여 일반적인 지원 을 실현 하기 때문에 위의 데 이 터 를 List
Gson gson = new Gson();
String jsonArray = "[\"Android\",\"Java\",\"PHP\"]";
String[] strings = gson.fromJson(jsonArray, String[].class);
List<String> stringList = gson.fromJson(jsonArray, new TypeToken<List<String>>() {}.getType());
//TypeToken protected , new TypeToken<List<String>>() {}.getType() new TypeToken<List<String>>().getType()
범용 해석 이 인터페이스 POJO 디자인 에 미 친 영향일반적인 도입 은 무관 한 코드 를 줄 일 수 있 습 니 다.
{"code":"0","message":"success","data":{}}
{"code":"0","message":"success","data":[]}
우리 가 진정 으로 필요 로 하 는 data 에 포 함 된 데 이 터 를 code 는 한 번 만 사용 하고 message 는 거의 사용 하지 않 습 니 다.만약 에 Gson 이 팬 형 을 지원 하지 않 거나 Gson 이 팬 형 을 지원 하 는 것 을 모 르 는 학생 들 은 반드시 이렇게 POJO 를 정의 할 것 입 니 다.
public class UserResponse {
public int code;
public String message;
public User data;
}
다른 인 터 페 이 스 를 사용 할 때 하나의 XXResponse 를 다시 정의 하여 data 의 형식 을 XX 로 바 꿉 니 다.분명 한 code 는 message 와 여러 번 반복 적 으로 정의 되 었 습 니 다.일반적인 형식 을 통 해 code 와 message 필드 를 Result 클래스 로 추출 할 수 있 습 니 다.그러면 data 필드 에 대응 하 는 POJO 만 작성 하면 됩 니 다.
public class Result<T> {
public int code;
public String message;
public T data;
}
// data User Result<User> , Result<List<User>>
4.Gson 의 흐름 식 반 직렬 화(1)자동 모드
Gson 은 from JSon()과 toJSon()두 가지 직접 해석 과 생 성 에 사용 하 는 방법 을 제공 했다.전 자 는 반 직렬 화 를 실현 하고 후 자 는 직렬 화 를 실현 했다.동시에 모든 방법 은 과부하 방법 을 제공 했다.
Gson.toJson(Object);
Gson.fromJson(Reader,Class);
Gson.fromJson(String,Class);
Gson.fromJson(Reader,Type);
Gson.fromJson(String,Type);
(2)수 동 방식:stream 패키지 의 JSonReader 류 를 사용 하여 수 동 으로 역 직렬 화 를 실현 하 는 수 동 방식 입 니 다.Android 에서 pull 로 XML 을 분석 하 는 것 과 유사 합 니 다.
String json = "{\"name\":\" \",\"age\":\"24\"}";
User user = new User();
JsonReader reader = new JsonReader(new StringReader(json));
reader.beginObject();
while (reader.hasNext()) {
String s = reader.nextName();
switch (s) {
case "name":
user.name = reader.nextString();
break;
case "age":
user.age = reader.nextInt(); //
break;
case "email":
user.email = reader.nextString();
break;
}
}
reader.endObject(); // throws IOException
System.out.println(user.name); //
System.out.println(user.age); // 24
System.out.println(user.email); //[email protected]
자동 방식 은 최종 적 으로 JSonReader 를 통 해 이 루어 집 니 다.첫 번 째 매개 변수 가 String 형식 이 라면 Gson 은 StringReader 를 스 트림 으로 변환 합 니 다.5.Gson 의 흐름 식 직렬 화
(1)자동 모드
Gson.toJSon 방법 목록
//PrintStream(System.out) 、StringBuilder、StringBuffer *Writer Appendable 。
Gson gson = new Gson();
User user = new User(" ",24,"[email protected]");
gson.toJson(user,System.out);
(2)수 동 방식
JsonWriter writer = new JsonWriter(new OutputStreamWriter(System.out));
writer.beginObject() // throws IOException
.name("name").value(" ")
.name("age").value(24)
.name("email").nullValue() // null
.endObject(); // throws IOException
writer.flush(); // throws IOException
//{"name":" ","age":24,"email":null}
// beginObject、endObject beginArray endArray, , 。beginArray name , beginObject value name 。
6.GsonBuilder 를 사용 하여 null 값 내 보 내기,포맷 출력,날짜 시간일반적인 상황 에서 Gson 류 가 제공 하 는 API 는 대부분의 사용 장면 을 만족 시 킬 수 있 지만 때로는 더 특수 하고 강력 한 기능 이 필요 할 때 새로운 종류의 Gson Builder 를 도입 한다.
Gson Builder 는 이름 에서 도 Gson 인 스 턴 스 를 구축 하 는 데 사용 되 는 클래스 임 을 알 수 있 습 니 다.Gson 기본 설정 을 바 꾸 려 면 Gson 을 사용 해 야 합 니 다.
Gson Builder 사용법:
// // Gson
Gson gson = new GsonBuilder().create();
(1)Gson 은 기본 값 null 키 를 내 보 내지 않 습 니 다.예 를 들 어:
public class User {
public String name;
public int age;
//
public String email;
}
Gson gson = new Gson();
User user = new User( ",24);
System.out.println(gson.toJson(user)); //{"name":" ","age":24}
//email json , json API Null , 。
사용 방법:
Gson gson = new GsonBuilder().serializeNulls() .create();
User user = new User(" ", 24);
System.out.println(gson.toJson(user)); //{"name":" ","age":24,"email":null}
포맷 출력,날짜 시간 및 기타:
Gson gson = new GsonBuilder()
// null
.serializeNulls()
// , 2
//
.setDateFormat("yyyy-MM-dd")
//
.disableInnerClassSerialization()
// Json( )]}' 4 )
.generateNonExecutableJson()
// html
.disableHtmlEscaping()
//
.setPrettyPrinting()
.create();
//: (Inner Class) (Nested Class)
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.