잭 슨 사용 및 성능 소개
public class TestJackson {
public static void main(String[] args) throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
Map<String,Object> params = new HashMap<>();
params.put("name","jack");
params.put("age",18);
// JSON
String jsonString = objectMapper.writeValueAsString(params);
System.out.println(jsonString);
System.out.println("-------------------- -----------------------------");
// JSON Object
Map resultMap = objectMapper.readValue(jsonString, HashMap.class);
resultMap.entrySet().stream().forEach(entry ->{
System.out.println(entry);
});
}
}
만약 당신 이 어떻게 조작 하 는 지 잊 어 버 렸 거나,단지 어떤 대상 과 JSON 꼬치 가 어떻게 서로 돌아 가 는 지 알 고 싶 었 다 면,그것 만으로 도 충분 합 니 다.잭 슨,그리고 잭 슨 과 fastJSon 등에 대한 대 비 를 더 알 고 싶다 면 아래 를 내 려 다 볼 수 있 습 니 다.
소개 하 다.
Jackson 은 현재 비교적 광범 위 하 게 사용 되 고 있 으 며,json 의 자바 오픈 소스 프레임 워 크 를 직렬 화하 고 반 직렬 화 하 는 데 사용 되 고 있다.잭 슨 커 뮤 니 티 는 상대 적 으로 활발 하고 업데이트 속도 도 빠르다.지 투 브 의 통 계 를 보면 잭 슨 은 가장 유행 하 는 제 이 슨 해상도 중 하나 다.Spring MVC 의 기본 제 이 슨 해상도 기 는 바로 Jackson 입 니 다.잭 슨 은 장점 이 많다.Jackson 이 의존 하 는 jar 가방 은 비교적 적 고 간단 하 며 사용 하기 쉽다.다른 자바 의 json 프레임 워 크 인 Gson 등에 비해 Jackson 은 큰 json 파일 을 분석 하 는 속도 가 비교적 빠르다.Jackson 이 실행 할 때 차지 하 는 메모리 가 비교적 낮 고 성능 이 비교적 좋다.잭 슨 은 유연 한 API 를 가지 고 있어 확장 과 맞 춤 형 제작 이 용이 하 다.
Jackson 의 1.x 버 전의 가방 이름 은 org.codehaus.jackson 입 니 다.2.x 버 전 으로 업그레이드 되 었 을 때 가방 이름 은 com.fasterxml.jackson 으로 바 뀌 었 습 니 다.본 고 는 최신 Jackson 의 2.9.1 버 전 을 바탕 으로 합 니 다.
구성 요소
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
jackson-databind 는 jackson-core 와 jackson-annotations 에 의존 하 며,jackson-databind 를 추가 한 후,jackson-core 와 jackson-annotations 도 이에 따라 자바 프로젝트 프로젝트 에 추가 되 었 다.관련 의존 팩 을 추가 하면 잭 슨 을 사용 할 수 있다. 정보 설정
writeValue 를 호출 하거나 readValue 방법 을 호출 하기 전에 Object Mapper 의 관련 설정 정 보 를 설정 해 야 합 니 다.이 설정 정 보 는 자바 대상 의 모든 속성 에 적 용 됩 니 다.
// json Java
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,
false);
// yyyy-MM-dd'T'HH:mm:ss.SSSZ
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
// null
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
//
objectMapper.setDefaultPropertyInclusion(JsonInclude.Include.NON_DEFAULT);
더 많은 설정 정 보 는 Jackson 의 DeserializationFeature,SerializationFeature,I nclude 를 볼 수 있 습 니 다. 주해 사용
Jack 은 주해 방식 의 사용 도 제공 했다.
주해
사용법
@JsonProperty
속성 에 사용 되 며,속성의 이름 을 정렬 할 때 다른 이름 으로 변환 합 니 다.예시:
@JsonProperty("birth_ d ate")
private Date birthDate;
@JsonFormat
속성 이나 방법 에 사용 하여 속성의 형식 을 직렬 화 할 때 지정 한 형식 으로 변환 합 니 다.예시:
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
public Date getBirthDate()
@JsonPropertyOrder
클래스 에 사용 되 며,속성 이 직렬 화 될 때 json 의 순 서 를 지정 합 니 다.예제:
@JsonPropertyOrder({ "birth_Date", "name" })
public class Person
@JsonCreator
구조 방법 에 사용 되 며@JSonProperty 와 함께 사용 되 며 매개 변수 가 있 는 구조 방법 이 적 용 됩 니 다.예시:
@JsonCreator
public Person(@JsonProperty("name")String name) {…}
@JsonAnySetter
속성 이나 방법 에 사용 되 며,역 직렬 화 되 지 않 은 속성 이름과 값 을 키 값 으로 map 에 저장 합 니 다.
@JsonAnySetter
public void set(String key, Object value) {
map.put(key, value);
}
@JsonAnyGetter
방법 에 사용 하여 모든 정렬 되 지 않 은 속성 을 가 져 옵 니 다.
public Map
public class TestJackson {
public static void main(String[] args) throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
// JSON
String jsonString = objectMapper.writeValueAsString(new User());
System.out.println(jsonString);
}
}
class User {
@JsonProperty("name")
private String aaa = "hello";
@JsonProperty("date")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date bbb = new Date();
... setter getter...
}
읽 기 대상 변환 은 Reader,File,URL,InputStream,바이트 배열 등에 서 대상 데 이 터 를 얻 을 수 있 습 니 다.좋아 하 는 것 은 스스로 연구 할 수 있 습 니 다.
그럼 성능 은 어때요?
대비 대상 은 가장 광범 위 하 게 적용 되 는 Jackson 과 Google 제품 의 Gson 을 선택 합 니 다.테스트 환경 은 JDK 8,AMD 3700 X,3200 MHZ 메모 리 를 선택한다.실험 을 간소화 하고 간단 한 대상 과 복잡 한 대상 의 String 회전 대상,대상 회전 String 만 테스트 하 며 1 천만 번 의 비교 결 과 를 다음 과 같이 호출 합 니 다(시간 단 위 는 밀리초).
테스트 결 과 를 보면 패스 트 제 이 슨 이 가장 빠 른 것 은 맞지 만 잭 슨 보다 20%가량 빠 른 데 그 쳤 고,구 글 의 지 슨 이 가장 느 리 고 격차 가 컸 다.여기까지 읽 고 패스 트 제 이 슨 을 선택 한 게 틀림 없다 고 생각 하 시 죠?그러나 사실 패스 트 제 이 슨 은 국제 적 으로 유행 하지 않 고 오히려 잭 슨 이 유행 하 는데 다른 사람들 은 바보 인가?물론 Fastjson 이 2 년 동안 고위 험 구멍 이 자주 드 러 났 기 때문에 이것 도 이미 묻 힌 복선 입 니 다.Fastjson 은 빠 른 것 을 추구 하기 위해 여러 가지 측면 을 버 렸 기 때 문 입 니 다.예 를 들 어 원 베 이 가 호 환 해 야 할 자바 특성 을 잃 었 기 때문에 json 기준 에 따 르 는 것 도 엄격 하지 않 습 니 다.전체적으로 보면 fastjson 은 코드 품질 이 비교적 나 쁜 국산 라 이브 러 리 입 니 다.물론 계속 향상 되 고 변화 하고 있 습 니 다.계속 버 텼 으 면 좋 겠 어 요.
면접 관 이 왜 FastJSon 을 선 택 했 냐 고 물 어보 면?빠 르 니까!이 한 가지 이유 로 그 를 반박 할 수 있다.
이곳 의 조사 연 구 는 메모리 점용,큰 문서 에 대한 테스트 가 충분 하지 않다.
현대 응용 프로그램 에서 가장 느 린 Gson 도 수 요 를 만족시킨다.문 서 를 처리 하 는 속도 가 느 려 서 선택 한 유일한 기준 이 될 수 없고 주요 기준 도 포함 되 지 않 을 수 있 습 니 다.IO 최적화,병행 처리 등 최적화 조 치 는 더 빠 른 라 이브 러 리 를 선택 하 는 것 보다 효과 적 입 니 다.
그래서 전체적으로 잭 슨 종합 평 가 는 좋 을 것 같 습 니 다.
잭 슨 의 사용 및 성능 에 대한 상세 한 설명 을 담 은 이 글 은 여기까지 입 니 다.잭 슨 의 사용 및 성능 에 관 한 더 많은 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
초보자가 Kotlin + Spring Boot의 Get 요청에서 JSON을 반환하기 위해 한 일업무로 서버측을 하게 되었으므로 그 연습을 위해 했던 일을 정리했습니다. 서버의 경험은 한순간 밖에 없습니다 🥺🥺🥺 (Java의 입문서를 해낸 정도... 먼저 @getMapping에서 String을 반환하는 방법은 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.