각종 JSON 기술 비교(Json-lib, 잭슨, Gson,Fastjson)

13325 단어 json
1. 각 JSON 기술의 소개와 우열 1.json-lib json-lib는 처음에 가장 광범위하게 응용된 json 해석 도구였다. json-lib가 좋지 않은 점은 많은 제3자 패키지에 의존한 것이 사실이다.commons-beanutils를 포함한다.jar,commons-collections-3.2.jar,commons-lang-2.6.jar,commons-logging-1.1.1.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 형식이 아니다.Google의 Gson Gson은 Google의 내부 요구 사항에 따라 Google이 자체적으로 개발한 Google의 가장 완전한 Json 해석 기기입니다.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을 분석하는 가장 기초적인 도구 클래스인 Json Parser 클래스: 해상도는 JSON에서 Json Elements까지의 해석 트리인 Json Element 클래스: 하나의 클래스를 대표하는 JSON 요소인 Json Object 클래스: JSON 대상 유형인 Json Array 클래스: Json Object 그룹 TypeToken 클래스: type을 만드는 데 사용되며 일반 List>(1)maven보다 com에 의존합니다.google.code.gson gson 2.2.4 (3)bean 변환 json
Gson gson = new Gson();
String json = gson.toJson(obj);
//obj   

(4) json 변환 bean
Gson gson = new Gson();
String json = "{\"id\":\"2\",\"name\":\"Json  \"}";
Book book = gson.fromJson(json, Book.class);

(5) 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());

(6) 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. 알리바바의 FastJson 가방 사용 프로필.(1)마벤트는com에 의존한다.alibaba fastjson 1.1.22 (2) 기초 변환 클래스와 (3) bean 변환 json 대상을 포맷된 json으로 변환
JSON.toJSONString(obj,true);

대상을 비포맷 json으로 변환하기
JSON.toJSONString(obj,false);

obj 디자인 대상은 복잡한 유형의 변환에 대해 중복된 인용이 json열로 바뀐 후 json열에 인용된 문자가 나타납니다. 예를 들어 $ref ":"$[0].books[1]
Student stu = new Student();
Set books= new HashSet();
Book book = new Book();
books.add(book);
stu.setBooks(books);
List list = new ArrayList();
for(int i=0;i<5;i++)
list.add(stu);
String json = JSON.toJSONString(list,true);

(4) json 변환 bean
String json = "{\"id\":\"2\",\"name\":\"Json  \"}";
Book book = JSON.parseObject(json, Book.class);

(5) json 변환 복잡한 bean, 예를 들어 List, Map
String json = "[{\"id\":\"1\",\"name\":\"Json  \"},{\"id\":\"2\",\"name\":\"java  \"}]";
// json   List
List list = JSON.parseObject(json,new TypeReference(){});
// json   Set
Set set = JSON.parseObject(json,new TypeReference(){});

(6) json 대상을 통해 json a를 직접 조작) json 열에서 속성 가져오기
String propertyName = 'id';
String propertyValue = "";
String json = "{\"id\":\"1\",\"name\":\"Json  \"}";
JSONObject obj = JSON.parseObject(json);
propertyValue = obj.get(propertyName));

b) json의 속성 제거
String propertyName = 'id';
String propertyValue = "";
String json = "{\"id\":\"1\",\"name\":\"Json  \"}";
JSONObject obj = JSON.parseObject(json);
Set set = obj.keySet();
propertyValue = set.remove(propertyName);
json = obj.toString();

c) json에 속성 추가
String propertyName = 'desc';
Object propertyValue = "json    ";
String json = "{\"id\":\"1\",\"name\":\"Json  \"}";
JSONObject obj = JSON.parseObject(json);
obj.put(propertyName, JSON.toJSONString(propertyValue));
json = obj.toString();

d) json의 속성 수정
String propertyName = 'name';
Object propertyValue = "json    ";
String json = "{\"id\":\"1\",\"name\":\"Json  \"}";
JSONObject obj = JSON.parseObject(json);
Set set = obj.keySet();
if(set.contains(propertyName))
obj.put(propertyName, JSON.toJSONString(propertyValue));
json = obj.toString();

e) json에 속성이 있는지 여부 판단
String propertyName = 'name';
boolean isContain = false;
String json = "{\"id\":\"1\",\"name\":\"Json  \"}";
JSONObject obj = JSON.parseObject(json);
Set set = obj.keySet();
isContain = set.contains(propertyName);

f) json의 날짜 형식 처리
Object obj = new Date();
String json = JSON.toJSONStringWithDateFormat(obj, "yyyy-MM-dd HH:mm:ss.SSS");

JSON을 사용합니다.JSONstringWithDateFormat, 이 방법은 설정된 날짜 형식으로 날짜를 변환할 수 있습니다. 셋째, json-lib 패키지의 사용 설명입니다.(1) 마벤트는 넷에 의존한다.sf.json-lib json-lib jdk15 2.2.2 commons-beanutils commons-beanutils 1.8.3 commons-collections commons-collections 3.2 commons-lang commons-lang 2.6 commons-logging  commons-logging  1.1.1  net.sf.ezmorph ezmorph 1.0.6 (2) 기본 변환 클래스와 (3) bean 변환 json a) 클래스를 Json으로 변환하고 obj는 일반적인 대상이지 List, Map의 대상이 아니다
String json = JSONObject.fromObject(obj).toString();

b) List, Map을 Json으로 변환
String json = JSONArray.fromObject(list).toString();
String json = JSONArray.fromObject(map).toString();

(4) json 변환 bean
String json = "{\"id\":\"1\",\"name\":\"Json  \"}";
JSONObject jsonObj = JSONObject.fromObject(json);
Book book = (Book)JSONObject.toBean(jsonObj,Book.class);

(5) json 변환List, 복잡한 유형의 변환에 문제가 발생할 수 있음
String json = "[{\"id\":\"1\",\"name\":\"Json  \"},{\"id\":\"2\",\"name\":\"Java  \"}]";
JSONArray jsonArray = JSONArray.fromObject(json);
JSONObject jsonObject;
T bean;
int size = jsonArray.size();
List list = new ArrayList(size);
for (int i = 0; i < size; i++) {
jsonObject = jsonArray.getJSONObject(i);
bean = (T) JSONObject.toBean(jsonObject, beanClass);
list.add(bean);
}

(6) json 변환Map
String jsonString = "{\"id\":\"1\",\"name\":\"Json  \"}";
JSONObject jsonObject = JSONObject.fromObject(jsonString);
Iterator keyIter = jsonObject.keys();
String key;
Object value;
Map valueMap = new HashMap();
while (keyIter.hasNext()) {
key = (String) keyIter.next();
value = jsonObject.get(key).toString();
valueMap.put(key, value);
}

(7) json은 날짜에 대한 조작이 비교적 복잡하기 때문에 JsonConfig을 사용해야 한다. Gson과FastJson보다 변환된 인터페이스 구현 클래스를 만들고 지정한 형식의 날짜로 변환하는 것이 더 번거롭다.
class DateJsonValueProcessor implements JsonValueProcessor{
public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS"; 
private DateFormat dateFormat; 
public DateJsonValueProcessor(String datePattern) { 
try { 
dateFormat = new SimpleDateFormat(datePattern); 
} catch (Exception ex) { 
dateFormat = new SimpleDateFormat(DEFAULT_DATE_PATTERN); 
} 
} 
public Object processArrayValue(Object value, JsonConfig jsonConfig) { 
return process(value); 
} 
public Object processObjectValue(String key, Object value, 
JsonConfig jsonConfig) { 
return process(value); 
} 
private Object process(Object value) { 
return dateFormat.format[1];
Map birthDays = new HashMap();
birthDays.put("WolfKing",new Date());
JSONObject jsonObject = JSONObject.fromObject(birthDays, jsonConfig);
String json = jsonObject.toString();
System.out.println(json);
}
}

(8) jsonObject json 작업 및 처리 a) json 열에서 속성 가져오기
String jsonString = "{\"id\":\"1\",\"name\":\"Json  \"}";
Object key = "name";
Object value = null;
JSONObject jsonObject = JSONObject.fromObject(jsonString);
value = jsonObject.get(key);
jsonString = jsonObject.toString();

b) json의 속성 제거
String jsonString = "{\"id\":\"1\",\"name\":\"Json  \"}";
Object key = "name";
Object value = null;
JSONObject jsonObject = JSONObject.fromObject(jsonString);
value = jsonObject.remove(key);
jsonString = jsonObject.toString();

c) json에 속성 추가 및 수정
String jsonString = "{\"id\":\"1\",\"name\":\"Json  \"}";
Object key = "desc";
Object value = "json    ";
JSONObject jsonObject = JSONObject.fromObject(jsonString);
jsonObject.put(key,value);
jsonString = jsonObject.toString();

d) json에 속성이 있는지 여부 판단
String jsonString = "{\"id\":\"1\",\"name\":\"Json  \"}";
boolean containFlag = false;
Object key = "desc";
JSONObject jsonObject = JSONObject.fromObject(jsonString);
containFlag = jsonObject.containsKey(key);

좋은 웹페이지 즐겨찾기