GSON (github : https://github.com/google/gson)은 Java 객체와 JSON 데이터 간의 매핑을 위해 Google에서 제공하는 Java 클래스 라이브러리입니다. JSON 문자열을 Java 객체로 변환하거나 그 반대도 마찬가지입니다.
GSON에서 가장 중요한 대상은 2 개의 GSON과 GSONBUILDER입니다.
GSON에는 Java 객체를 JSON으로 변환하기위한 두 가지 가장 기본적인 방법 (1) Tojson ()이 있습니다.
(2) Fromjson ()은 JSON을 Java Object로 변환합니다
엔티티 클래스 작성 :
공개 클래스 사람들 {문자열 이름; int 연령; 부울 세트 이름; 공개 문자열 getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } public int getage () {반환 연령; } public void 설정 (int Age) {this.age = age; } public boolean getSetName () {return setName; } public void setsetName (boolean setName) {this.setName = setName; } @override public String toString () {return "name =" + name + "age =" + age + "setName =" + setName; }}테스트 클래스 Gsontest를 작성하십시오
가져 오기 com.google.gson.exclusionstrategy; import com.google.gson.fieldAttributes; import com.google.gson.gson; import com.google.gson.gsonbuilder;/*** Java 개체를 JSON으로 변환하십시오. */public class gsontest {public static void main (String [] args) {people p = new People (); P. 세트 (20); p.setName ( "사람"); p.setsetname (true); GSON GSON = NEW GSON (); System.out.println (gson.tojson (p)); }}출력 결과 :
{ "name": "people", "age": 20, "setname": true}이것은 GSON을 사용하는 가장 쉬운 방법입니다. JSON으로 변환 할 때 BOOL 유형의 속성 세트 이름을 변환 해야하는 경우 구현 방법은 무엇입니까?
GSON의 패키지를 오랫동안 검색 한 후 Com.google.gson 패키지 아래에 인터페이스가 있음을 알았습니다 : ExclusionStrategy. 그 이름을 기준으로 그 일이 무엇인지 알지 못하지만이 인터페이스가 GSON 변환에 대한 제외 전략을 설정하는 데 사용 된 것으로 추론 될 수 있습니다. 그래서 공식 웹 사이트 http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html 에서이 인터페이스를 확인 했으며이 인터페이스가 구현되고 구현 클래스의 객체가 GSON으로 전환 할 때 GSON으로 변환 할 때 GSON이 지정된 클래스 또는 속성을 필터링 할 때 GSON으로 채워져 있음을 발견했습니다. 따라서 다음 코드는 다음과 같습니다.
import com.google.gson.exclusionstrategy; import com.google.gson.fieldAttributes; import com.google.gson.gson; import com.google.gson.gsonbuilder;/*** Java 개체를 JSON으로 변환하고 특정 파일을 건너 뛰십시오. */public class gsontest {public static void main (String [] args) {people p = new People (); P. 세트 (20); p.setName ( "사람"); p.setsetname (true); ExclusionStrategy excludestrategy = 새로운 setterexclusionstrategy (); GSON GSON1 = NEW GSONBUILDER () .SETEXCLUSIONTTROGRAGES (incectionestrategy) .create (); GSON GSON2 = 새로운 GSON (); 문자열 json1 = gson1.tojson (p); 문자열 json2 = gson2.tojson (p); System.out.println (json1); System.out.println (json2); People P1 = GSON1.FROMJSON (JSON1, PEOLE.CLASS); People P2 = gson2.fromjson (json2, people.class); System.out.println (P1); System.out.println (P2); } private static class setterExclusionStrategy는 제외 시설 스트레이트가 {public boolean rootskipclass (class <?> clazz) {return false; } public boolean rookskipfield (fieldAttributes f) {return f.getName (). startSwith ( "set"); }}}GSON 객체를 생성하는 두 가지 방법이 있습니다. new GSON ()은 기본 구성을 사용하여 GSON 객체를 생성하는 것을 의미하며 GSONBUILDER.CREATE () 메소드를 사용하여 생성하는 경우 일부 설정을 사용자 정의하여 특정 특정 상황에 대해 생성 된 GSON을 더 적합하게 만들 수 있습니다. 위의 예제의 첫 번째 파란색 코드는 "세트"라는 단어로 시작하는 필터링 속성을 구성하는 GSON 객체를 만듭니다 (특정 유형을 필터링 해야하는 경우 클래스 <?> Clazz) 방법을 다시 작성할 수 있습니다. 여러 상황을 필터링 할 필요가 있다면 클래스 대상을 생성 할 수 있습니다. 따라서이 예에서는 People Object를 JSON으로 변환 할 때 속성 SetName이 필터링됩니다. JSON1에는 속성 SetName이 없으므로 JSON1을 People Object로 데려 갈 때 부울 유형의 SetName은 값이 없으므로 인쇄 할 때 부울 유형의 기본값이 가져옵니다. 따라서 다음과 같은 결과가 얻어졌습니다.
{ "name": "people", "age": 20} { "name": "people", "age": 20, "setname": true} name = people age = 20 setname = falsename = people age = 20 setname = trueGSON은 또한 주석 사용을 지원합니다. com.google.gson.annotation 패키지에는 몇 가지 주석이 노출되어 있어야합니다. 그들은 각자 자신의 기능을 가지고 있습니다. 다음은 일반적으로 사용되는 주석을 도입하는 공식적인 예입니다.
폭로하다:
이 주석은 속성에 작용하여 직렬화 및 사제화 할 때이 속성이 GSON 객체에 노출됨을 나타냅니다. 이 주석은 GSONBUILDER 메소드와 GSONBUILDER.EXCLUDEFIELDSWITHOUTEXPOSEANNOTATION () 메소드를 사용하여 GSON 객체가 생성 될 때만 유효합니다. 그렇지 않으면 유효하지 않습니다. 다음은 @Expose 주석을 사용하는 방법을 소개하는 예입니다.
공개 클래스 사용자 {@expose private string firstName; @expose (serialize = false) 개인 문자열 마지막 이름; @expose (serialize = false, deserialize = false) private String emailaddress; 개인 문자열 비밀번호;}new GSON () 메소드에서 GSON 객체를 작성하면 TOJSON () 메소드 및 FROMJSON () 메소드는 직렬화 및 사제화 할 때이 4 가지 속성을 작동시킵니다. 그러나 GSON GSON = NEW GSONBUILDER (). 이 GSON 객체는 또한 마지막 이름과 emailAdDdress 필드를 제외합니다. 속성 Serialize annotated @expose가 false로 설정되기 때문입니다. 마찬가지로, GSON은 사막화가 거짓으로 설정되기 때문에 사막화 중에 EMALADDRESS 필드를 제외합니다.
SerializedName :
이 주석은 속성에 사용되며,이 속성이 JSON으로 직렬화되면 이름이 주석 값 속성에 의해 지정된 값으로 직렬화되어야 함을 나타냅니다.
이 주석은 기본 이름 지정 정책을 포함하여 FieldNamingPolicy를 무시합니다. 다음은 @SerializedName 주석이 사용되는 방법을 소개하는 예입니다.
공개 클래스 someclasswithfields {@serializedname ( "name") private final string somefield; 비공개 최종 문자열 일부 서 필드; public someclasswithfields (문자열 a, 문자열 b) {this.somefield = a; this.someotherfield = b; }}다음 코드는 위의 테스트 클래스를 직렬화 한 결과를 보여줍니다.
someclasswithfields objectToserialize = new someclasswithfields ( "a", "b"); gson = new gson (); String jsonRepresentation = gson.tojson (ObjectToserialize); system.out.println (jsonrepresentation);
실행 결과는 다음과 같습니다.
{ "name": "a", "someotherfield": "b"}}"일부 필드"속성이 "이름"으로 직렬화되었음을 알 수 있습니다.
참고 : @SerializedName의 값에 지정된 속성 이름은 유효한 JSON 속성 이름이어야합니다.