각종 JSON 비교(josn-lib, jackson, gson,fastjson)

7313 단어 json
1. 각 JSON 기술의 소개와 우열
 
1.json-lib
json-lib는 처음에 가장 광범위하게 응용된 json 해석 도구로 json-lib가 좋지 않은 부분은 많은 제3자 패키지에 의존했다. 예를 들어commons-beanutils를 포함한다.jar,commons-collections.jar,commons-lang.jar,commons-logging.jar,ezmorph-1.0.6.jar, 복잡한 유형의 변환에 있어 json-lib는 json을 bean으로 변환하는 데 결함이 있다. 예를 들어 한 클래스에 다른 클래스의list나 맵 집합이 나타나면 json-lib가 json에서 bean으로 변환하는 데 문제가 생길 수 있다.
json-lib는 기능과 성능 면에서 현재 인터넷화의 수요를 만족시킬 수 없다.
 
2. 개원한 잭슨
json-lib 프레임워크에 비해 잭슨이 의존하는jar 패키지는 비교적 적고 간단하고 사용하기 쉬우며 성능도 상대적으로 높다.그리고 잭슨 커뮤니티는 상대적으로 활발하고 업데이트 속도도 빠르다.잭슨은 복잡한 유형의 json 변환 bean에 문제가 생기고, 일부 집합 맵, 리스트의 변환에 문제가 생긴다.잭슨은 복잡한 유형의 bean에서 Json을 변환하는데, 변환된 json 형식은 표준적인 Json 형식이 아니다.
 
3. Google의 Gson
Gson은 현재 기능이 가장 완전한 Json 해석 신기이다. Gson은 당초 Google 회사의 내부 수요에 대응하기 위해 Google이 자체 개발한 것이었으나 2008년 5월 1판이 공개된 이후 많은 회사나 사용자들이 사용하고 있다.Gson의 응용은 주로 toJson과 fromJson 두 개의 변환 함수로 의존이 없고 예외적인 추가jar가 필요하지 않아 JDK에서 직접 뛸 수 있다.이러한 대상 변환을 사용하기 전에 대상의 유형과 구성원을 잘 만들어야만 JSON 문자열을 대응하는 대상으로 성공적으로 변환할 수 있습니다.클래스에 get과 set 방법만 있으면 Gson은 복잡한 유형의 json을 bean 또는 bean에서 json으로 전환할 수 있으며 JSON 해석의 신기이다.
Gson은 기능적으로 흠잡을 데가 없지만 성능상으로는 FastJson보다 차이가 있다.
 
4. 알리바바의FastJsonFastjson은 자바 언어로 작성된 고성능 JSON 프로세서로 알리바바가 개발했다.의존 없이 예외 추가 jar가 필요 없고 JDK에서 바로 뛸 수 있습니다.FastJson은 복잡한 유형의 Bean 변환 Json에 문제가 발생할 수 있으며, 인용의 유형이 발생할 수 있어 Json 변환에 오류가 발생할 수 있으므로 인용을 제정해야 한다.
FastJson은 모든 json 라이브러리를 뛰어넘는 파우스트의 속도를 극대화하는 독창적인 알고리즘을 채택했다.
 
4가지 Json 기술을 비교한 결과, 프로젝트를 선택할 때 Google의 Gson과 알리바바의 FastJson 두 가지를 병행하여 사용할 수 있으며, 기능적 요구만 있고 성능적 요구가 없으면 Google의 Gson을 사용할 수 있으며, 성능적 요구가 있으면 Gson을 사용하여 bean을 json으로 변환하여 데이터의 정확성을 확보할 수 있으며, FastJson을 사용하여 Json을 Bean으로 변환할 수 있다.
 
 
2. Google의 gson 사용 소개
Gson 클래스: json을 분석하는 가장 기초적인 도구 클래스인 JsonParser 클래스: 해상도는 JSON에서 JsonElements까지의 해석 트리인 JsonElement 클래스: 하나의 클래스를 대표하는 JSON 요소인 JsonObject 클래스: JSON 대상 유형인 JsonArray 클래스: JsonObject 그룹 TypeToken 클래스: type을 만드는 데 사용됩니다. 예를 들어 일반적인List>보다
(1) bean 변환 json
Gson gson = new Gson();

String json = gson.toJson(obj);  //obj   

(2) json 변환 bean
Gson gson = new Gson();

String json = "{\"id\":\"2\",\"name\":\"Json  \"}";

Book book = gson.fromJson(json, Book.class);

(3) json은 복잡한 bean을 변환한다. 예를 들어List,Set
 json        bean,    TypeToken

Gson gson = new Gson();

String json = "[{\"id\":\"1\",\"name\":\"Json  \"},{\"id\":\"2\",\"name\":\"java  \"}]";

// json   List

List list = gson.fromJson(json,new TypeToken() {}.getType());

// json   Set

Set set = gson.fromJson(json,new TypeToken() {}.getType());

(4) json 대상을 통해 json 및 일부 json 도구를 직접 조작한다
a) Json 포맷
String json = "[{\"id\":\"1\",\"name\":\"Json  \"},{\"id\":\"2\",\"name\":\"java  \"}]";

Gson gson = new GsonBuilder().setPrettyPrinting().create();

JsonParser jp = new JsonParser();

JsonElement je = jp.parse(json);

json = gson.toJson(je);

b) 문자열이 json인지 아닌지를 판단하고 포착된 이상을 통해 json인지 판단한다
String json = "[{\"id\":\"1\",\"name\":\"Json  \"},{\"id\":\"2\",\"name\":\"java  \"}]";

boolean jsonFlag;

try {

new JsonParser().parse(str).getAsJsonObject();

jsonFlag = true;

} catch (Exception e) {

jsonFlag = false;

}

c) json 열에서 속성 가져오기
String json = "{\"id\":\"1\",\"name\":\"Json  \"}";

String propertyName = 'id';

String propertyValue = "";

try {

JsonParser jsonParser = new JsonParser();

JsonElement element = jsonParser.parse(json);

JsonObject jsonObj = element.getAsJsonObject();

propertyValue = jsonObj.get(propertyName).toString();

} catch (Exception e) {

propertyValue = null;

}

d) json의 속성 제거
String json = "{\"id\":\"1\",\"name\":\"Json  \"}";

String propertyName = 'id';

JsonParser jsonParser = new JsonParser();

JsonElement element = jsonParser.parse(json);

JsonObject jsonObj = element.getAsJsonObject();

jsonObj.remove(propertyName);

json = jsonObj.toString();

e) json에 속성 추가
String json = "{\"id\":\"1\",\"name\":\"Json  \"}";

String propertyName = 'desc';

Object propertyValue = "json       ";

JsonParser jsonParser = new JsonParser();

JsonElement element = jsonParser.parse(json);

JsonObject jsonObj = element.getAsJsonObject();

jsonObj.addProperty(propertyName, new Gson().toJson(propertyValue));

json = jsonObj.toString();

f) json의 속성 수정
String json = "{\"id\":\"1\",\"name\":\"Json  \"}";

String propertyName = 'name';

Object propertyValue = "json       ";

JsonParser jsonParser = new JsonParser();

JsonElement element = jsonParser.parse(json);

JsonObject jsonObj = element.getAsJsonObject();

jsonObj.remove(propertyName);

jsonObj.addProperty(propertyName, new Gson().toJson(propertyValue));

json = jsonObj.toString();

g) json에 속성이 있는지 여부 판단
String json = "{\"id\":\"1\",\"name\":\"Json  \"}";

String propertyName = 'name';

boolean isContains = false ;

JsonParser jsonParser = new JsonParser();

JsonElement element = jsonParser.parse(json);

JsonObject jsonObj = element.getAsJsonObject();

isContains = jsonObj.has(propertyName);

h) json의 날짜 형식 처리
GsonBuilder builder = new GsonBuilder();

builder.setDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

Gson gson = builder.create();

그리고 gson 대상을 사용하여 json 처리를 하고 날짜Date 클래스의 대상이 나타나면 설정된 형식에 따라 처리합니다
i) json에서 Html의 이스케이프
Gson gson = new Gson();

       Html    ,             

GsonBuilder builder = new GsonBuilder();

builder.disableHtmlEscaping();

Gson gson = builder.create();

 
3. Alibaba의fastjson 사용 안내
 
Fastjson API 입구 클래스는com입니다.alibaba.fastjson.JSON, 자주 사용하는 서열화 작업은 JSON 클래스의 정적 방법으로 직접 완성할 수 있습니다.
public static final Object parse(String text); //  JSON  parse JSONObject  JSONArray 
public static final JSONObject parseObject(String text); //  JSON  parse JSONObject    
public static final  T parseObject(String text, Class clazz); //  JSON  parse JavaBean 
public static final JSONArray parseArray(String text); //  JSON  parse JSONArray 
public static final  List parseArray(String text, Class clazz); // JSON  parse JavaBean   
public static final String toJSONString(Object object); //  JavaBean    JSON   
public static final String toJSONString(Object object, boolean prettyFormat); //  JavaBean        JSON   
public static final Object toJSON(Object javaObject);  JavaBean   JSONObject  JSONArray。


 
 
SerializeWriter: StringBuffer와 동일
JSONarray: List
JSONObject: Map과 동일
 
JSON의 반서열화는 진정한 그룹이 없고 본질 유형은 모두 List이다
 
fastjson에는 주석을 지원하고 모든 종류의 서열화를 지원하는 고급 기능도 많은데 이런 것들은 모두 좋은 특성이고 기능이 강하다

좋은 웹페이지 즐겨찾기