잭 슨 사용 및 성능 소개

6878 단어 Jackson쓰다
코드 를 직접 올 려 보 세 요.가장 간단 하고 자주 사용 하 는 방법 입 니 다.Object 를 JSON 으로 바 꾸 고 JSon 을 Object 로 바 꾸 는 방법 입 니 다.

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 버 전 을 바탕 으로 합 니 다.
구성 요소
  • jackson-core,핵심 패 키 지 는'스 트림 모드'분석 을 바탕 으로 하 는 관련 API 를 제공 합 니 다.이 는 JSonPaser 와 JSonGenerator 를 포함 합 니 다.Jackson 내부 구현 은 바로 고성능 스 트림 모드 API 의 JSonGenerator 와 JSonParser 를 통 해 json 을 생 성하 고 해석 하 는 것 입 니 다.
  • jackson-annotations,주해 팩,표준 주해 기능 제공;
  • jackson-databind,데이터 바 인 딩 패키지,'대상 바 인 딩'분석 에 기반 한 관련 API(Object Mapper)와'트 리 모델'분석 에 관 한 API(JSonNode)를 제공 합 니 다.'대상 바 인 딩'으로 해 석 된 API 와'트 리 모델'로 해 석 된 API 는'스 트림 모드'로 해 석 된 API 에 의존 합 니 다.
  • pom 의존 
    
    <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 any() { return 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 최적화,병행 처리 등 최적화 조 치 는 더 빠 른 라 이브 러 리 를 선택 하 는 것 보다 효과 적 입 니 다.
    그래서 전체적으로 잭 슨 종합 평 가 는 좋 을 것 같 습 니 다.
    잭 슨 의 사용 및 성능 에 대한 상세 한 설명 을 담 은 이 글 은 여기까지 입 니 다.잭 슨 의 사용 및 성능 에 관 한 더 많은 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기