자바 의 Gson 사용 에 대한 자세 한 설명

9678 단어 JavaGson
JSON 은 XML 보다 가 볍 고 바 이 너 리 보다 읽 기와 쓰기 쉬 우 며 튜 닝 도 편리 한 텍스트 형식의 데이터 교환 형식 입 니 다.분석 과 생 성 방식 이 매우 많 습 니 다.자바 에서 가장 자주 사용 하 는 라 이브 러 리 는 JSON-Java,Gson,Jackson,FastJSon 등 이 있 습 니 다.
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 를 List.class 로 직접 바 꾸 는 것 은 안 됩 니 다.자바 에 게 List과 List두 개의 바이트 파일 은 하나의 것 만 List.class 입 니 다.이것 은 자바 범 형 사용 시 주의해 야 할 문제 범 형 지우 기 입 니 다.
Gson 은 위의 문 제 를 해결 하기 위해 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)   
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기