[일일 업무 개발] 일반적으로 사용되는 JSON 라이브러리 API

지손

GSON은 Java 객체와 JSON 데이터 간의 매핑을 위해 Google에서 제공하는 Java 클래스 라이브러리로, Json 문자를 Java 객체로 빠르게 변환하거나 Java 객체를 Json 문자열로 변환할 수 있습니다. SpringBoot에는 기본적으로 gson에 대한 버전 제어가 이미 있습니다. 버전 version은 부트의 기본 버전을 재정의하도록 지정할 수 있습니다.

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.6</version>
</dependency>

Json 문자열에 대한 Java 객체(직렬화)

여기에 이미지 설명 삽입

문자열 toJson(Object src) 지정된 개체를 동등한 Json 표현으로 직렬화합니다. 이 메서드는 지정된 개체가 일반 유형이 아닌 경우 사용해야 합니다. 개체가 일반 유형인 경우 toJson(object,type)을 대신 사용하세요.
문자열 toJson(Object src, 유형 typeOfSrc) 지정된 개체(일반 유형의 개체 포함)를 동등한 Json 표현으로 직렬화합니다. 일반 개체가 아닌 경우 {@link#toJson(Object)}를 대신 사용하세요.
문자열 toJson(JsonElement jsonElement) JsonElement를 동등한 JSON 표현으로 변환합니다.
JsonElement toJsonTree(Object src) 지정된 개체를 JsonElement의 동등한 표현으로 직렬화합니다. 이 메서드는 지정된 개체가 일반 유형이 아닌 경우 사용해야 합니다. 개체가 일반 유형인 경우 대신 {@link#toJsonTree(object, type)}를 사용하세요.
@Data
public class Teacher {
    
    
    private Integer id;
    private String name;
    List<Student> students;
}
@Data
public class Student {
    
    
    private Integer id;
    private String name;
    private Integer age;
}

@Test
public void testToJson() {
    
    
    Teacher teacher = new Teacher();
    Student student = new Student();
    ArrayList<Student> students = new ArrayList<>();

    student.setId(1001);
    student.setName("SpringBoot");
    student.setAge(20);
    students.add(student);

    teacher.setId(1);
    teacher.setName("Spring");
    teacher.setStudents(students);

    Gson gson = new Gson();
    String str = gson.toJson(teacher);
    System.out.println(str);
}

여기에 이미지 설명 삽입

Json 문자열을 Java 객체로(역직렬화)

여기에 이미지 설명 삽입

T fromJson(문자열 json, 클래스 classOfT) 지정된 Json을 지정된 클래스의 객체로 역직렬화합니다. 지정된 클래스가 제네릭 형식인 경우 fromJson(String, Type) 메서드를 사용합니다.
T fromJson(문자열 json, 유형 typeOfT) 지정된 Json을 지정된 유형의 개체로 역직렬화합니다. 이 방법은 지정된 개체가 일반 유형인 경우에 유용합니다. 일반이 아닌 개체의 경우 대신 fromJson(String json, Class classOfT)를 사용하십시오.
T fromJson(JsonElement json, Class classOfT) 지정된 json 요소를 지정된 유형의 객체로 역직렬화합니다. 지정된 클래스가 일반 유형인 경우 fromJson(JsonElement, Type) 메서드를 사용합니다.
T fromJson(JsonElement json, 유형 typeOfT)
T fromJson(리더 json, 클래스 classOfT)
T fromJson(리더 json, 유형 typeOfT) 지정된 문자 입력 스트림에서 읽은 Json을 지정된 클래스의 개체로 역직렬화합니다.
/**
     * fromJson方法做与 toJson 相反的操作,将 json 格式的字符串转为基本数据类型、 POJO 对象、List、Map 、JsonElement  等
     */
@Test
public void testFromJson() {
    
    
    String  str = "{\"id\":1,\"name\":\"Spring\",\"students\":[{\"id\":1001,\"name\":\"SpringBoot\",\"age\":20}]}";
    Gson gson = new Gson();
    Teacher teacher = gson.fromJson(str, Teacher.class);
    System.out.println(teacher);
}

여기에 이미지 설명 삽입

FastJson

fastjson은 Alibaba의 오픈 소스 JSON 구문 분석 라이브러리로, JSON 형식의 문자열을 구문 분석할 수 있고 Java Bean을 JSON 문자열로 직렬화하고 JSON 문자열에서 JavaBean으로 역직렬화를 지원합니다.

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.49</version>
</dependency>

FASTJSON v2FASTJSON프로젝트의 중요한 업그레이드이며 성능 이 크게 향상되었으며 향후 10년 동안 FASTJSON v2고성능 라이브러리를 제공하는 것이 목표입니다 . JSON같은 세트를 API통해

  • JSON/JSONB 두 가지 프로토콜을 지원하며 JSONPath는 일급 시민입니다.
  • 전체 분석 및 부분 분석을 지원합니다.
  • Java 서버, Android 클라이언트 및 빅 데이터 시나리오를 지원합니다.
  • 코틀린 지원
  • Android 지원(2.0.3.android)
  • Graal 네이티브 이미지(2.0.3.graal) 지원

fastjson v2는 패키지가 1.x와 다르게 com.alibaba.fastjson2 입니다 이전에 fastjson1을 사용하셨다면 대부분의 경우 패키지 이름만 바꾸시면 됩니다

<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.20</version>
</dependency>
JSON**.**parseObject() JSON로 해결 됩니다JSONObject
JSON**. parseArray (**텍스트) JSON로 해결 됩니다JSONArray
JSON**. parseObject ( 텍스트 ,** User.class) 개체 JSON로 해결 됩니다Java
JSON**. toJSONString (**데이터); Java개체를 다음과 같이 직렬화합니다.JSON

Json 문자열에 대한 Java 객체(직렬화)

@Test
public void testToJSONString() {
    
    
    Teacher teacher = new Teacher();
    Student student = new Student();
    ArrayList<Student> students = new ArrayList<>();

    student.setId(1001);
    student.setName("SpringBoot");
    student.setAge(20);
    students.add(student);

    teacher.setId(1);
    teacher.setName("Spring");
    teacher.setStudents(students);
    String string = JSON.toJSONString(teacher);
    System.out.println(string);
}

여기에 이미지 설명 삽입

Json 문자열을 Java 객체로(역직렬화)

@Test
public void testParseObject() {
    
    
    String  str = "{\"id\":1,\"name\":\"Spring\",\"students\":[{\"id\":1001,\"name\":\"SpringBoot\",\"age\":20}]}";

    Teacher teacher = JSON.parseObject(str, Teacher.class);
    System.out.println(teacher);
}

여기에 이미지 설명 삽입

잭슨

Jackson은 json 직렬화 및 역직렬화를 위해 널리 사용되는 Java 오픈 소스 프레임워크입니다. Jackson 커뮤니티는 상대적으로 활발하고 업데이트 속도가 비교적 빠릅니다 Github의 통계에 따르면 Jackson은 가장 인기있는 json 파서 중 하나이며 Spring MVC의 기본 json 파서는 Jackson입니다.

이미지

잭슨은 다음과 같은 많은 장점이 있습니다.

  • Jackson은 더 적은 jar 패키지에 의존하고 사용하기 쉽습니다.
  • Gson과 같은 다른 Java json 프레임워크와 비교할 때 Jackson은 대용량 json 파일을 더 빠르게 구문 분석합니다.
  • Jackson은 상대적으로 적은 메모리 사용량과 더 나은 성능으로 실행됩니다.
  • Jackson에는 쉽게 확장하고 사용자 정의할 수 있는 유연한 API가 있습니다.

현재 최신 버전은 2.9.4이며 Jackson의 핵심 모듈은 세 부분으로 구성됩니다.

  1. jackson-core 코어 패키지는 JsonPaser 및 JsonGenerator를 포함하여 "흐름 모드" 구문 분석을 기반으로 관련 API를 제공합니다. Jackson의 내부 구현은 고성능 스트리밍 모드 API의 JsonGenerator와 JsonParser를 통해 json을 생성하고 파싱하는 것입니다.
  2. 표준 주석 기능을 제공하는 jackson-annotations 주석 패키지;
  3. jackson-databind 데이터 바인딩 패키지, "오브젝트 바인딩" 분석 기반 관련 API( ObjectMapper ) 및 "트리 모델" 분석 기반 관련 API(JsonNode) 제공, "오브젝트 바인딩" 분석 기반 API 및 "트리 모델" 분석 API "스트림 모드"를 기반으로 구문 분석되는 API에 의존합니다.

Json 문자열에 대한 Java 객체(직렬화)

문자열 writeValueAsString(객체 값) 1. Java 객체(예: POJO, List, Set, Map 등)를 json 문자열로 직렬화하는 데 사용되며 객체의 속성 값이 null인 경우 기본적으로 null로 직렬화됩니다. ; null이면 반환된 직렬화된 결과도 null을 반환
byte[] writeValueAsBytes(객체 값) Java 객체를 바이트 배열로 직렬화
writeValue(파일 결과 파일, 객체 값) Java 객체를 직렬화하고 지정된 파일로 출력
writeValue(OutputStream 출력, 객체 값) Java 객체를 지정된 바이트 출력 스트림으로 직렬화하고 출력합니다.
writeValue(작성자 w, 객체 값) Java 객체를 지정된 문자 출력 스트림으로 직렬화 및 출력
@Test
public void testWriteValueAsString() throws JsonProcessingException {
    
    
    Teacher teacher = new Teacher();
    Student student = new Student();
    ArrayList<Student> students = new ArrayList<>();

    student.setId(1001);
    student.setName("SpringBoot");
    student.setAge(20);
    students.add(student);

    teacher.setId(1);
    teacher.setName("Spring");
    teacher.setStudents(students);

    ObjectMapper objectMapper = new ObjectMapper();
    String str = objectMapper.writeValueAsString(teacher);
    System.out.println(str);
}

여기에 이미지 설명 삽입

Json 문자열을 Java 객체로(역직렬화)

1. 보통 객체로 옮기는 방법은 objectMapper.readValue(String jsonStr, Class<T> clazz)
2. List나 Map으로 옮기는 방법은 objectMapper.readValue(String jsonStr, TypeReference<T> valueTypeRef)다음과 같은 예를 들 수 있다.

  • 목록: objectMapper.readValue(json, new TypeReference<List>() {});
  • 지도: objectMapper.readValue(json, new TypeReference<Map<String, Teacher>>() {});

자바 빈 객체

T readValue(문자열 내용, 클래스 값 유형) 1. 주어진 JSON 문자열에서 Java 객체로 역직렬화 2. 내용이 비어 있거나 null인 경우 오류가 보고됨 3. valueType은 역직렬화 결과 객체를 나타내며 POJO, List와 같은 모든 Java 객체일 수 있음 , 설정 , 지도 등
T readValue(바이트[] src, 클래스 값 유형) json 콘텐츠의 바이트 배열을 자바 객체로 역직렬화
T readValue(파일 소스, 클래스 값 유형) 로컬 json 콘텐츠 파일을 자바 객체로 역직렬화
T readValue(InputStream src, 클래스 값 유형) json 콘텐츠의 바이트 입력 스트림을 java 객체로 역직렬화합니다.
T readValue(리더 src, 클래스 값 유형) json 콘텐츠의 문자 입력 스트림을 자바 객체로 역직렬화합니다.
T readValue(URL src, 클래스 값 유형) 네트워크 URL 주소를 통해 json 콘텐츠를 자바 객체로 역직렬화
@Test
public void readValue() throws JsonProcessingException {
    
    
    String  str = "{\"id\":1,\"name\":\"Spring\",\"students\":[{\"id\":1001,\"name\":\"SpringBoot\",\"age\":20}]}";

    ObjectMapper objectMapper = new ObjectMapper();
    Teacher teacher = objectMapper.readValue(str, Teacher.class);
    System.out.println(teacher);
}

여기에 이미지 설명 삽입

목록 컬렉션 개체

첫 번째 작성 방법은 List 객체로 구문 분석할 수 있지만 LinkedHashMap 객체는 내부 엔터티 결과입니다.

public static void main(String[] args) throws JsonProcessingException {
    
    
    String  str = "[{\"id\":1,\"name\":\"Spring\",\"students\":[{\"id\":1001,\"name\":\"SpringBoot\",\"age\":20}]}]";

    ObjectMapper objectMapper = new ObjectMapper();
    List list = objectMapper.readValue(str, List.class);
    System.out.println(list);

}

여기에 이미지 설명 삽입
두 번째 작성 방법은 우리가 원하는 JavaBean 엔터티 개체로 변환할 수 있으며, 이 방법은 List 컬렉션 개체를 변환하는 데 자주 사용됩니다.

String  str = "[{\"id\":1,\"name\":\"Spring\",\"students\":[{\"id\":1001,\"name\":\"SpringBoot\",\"age\":20}]}]";
ObjectMapper objectMapper = new ObjectMapper();
List<Teacher> teachers = objectMapper.readValue(str, new TypeReference<List<Teacher>>() {
    
    });
System.out.println(teachers);

여기에 이미지 설명 삽입

지도 객체

String  str = "{\"teacher1\":{\"id\":1,\"name\":\"Spring\",\"students\":[{\"id\":1001,\"name\":\"SpringBoot\",\"age\":20}]}," +
        "\"teacher2\":{\"id\":2,\"name\":\"JAVA\",\"students\":[{\"id\":1002,\"name\":\"JAVASE\",\"age\":10}]}}";
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Teacher> map = objectMapper.readValue(str, Map.class);
System.out.println(map);

여기에 이미지 설명 삽입

두 번째 작성 방법:

String  str = "{\"teacher1\":{\"id\":1,\"name\":\"Spring\",\"students\":[{\"id\":1001,\"name\":\"SpringBoot\",\"age\":20}]}," +
        "\"teacher2\":{\"id\":2,\"name\":\"JAVA\",\"students\":[{\"id\":1002,\"name\":\"JAVASE\",\"age\":10}]}}";
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Teacher> map = objectMapper.readValue(str, new TypeReference<Map<String, Teacher>>() {
    
    });
System.out.println(map);

여기에 이미지 설명 삽입

Json 문자열 콘텐츠를 Json 노드 개체로 역직렬화

JsonNode readTree(문자열 콘텐츠) JSON 문자열을 JsonNode 개체, 즉 json 노드 개체로 역직렬화합니다.
JsonNode readTree(URL 소스) 네트워크의 json 파일을 json 노드 개체로 역직렬화합니다.
JsonNode readTree(InputStream 입력) json 파일 입력 스트림을 json 노드 개체로 역직렬화합니다.
JsonNode readTree(바이트[] 콘텐츠) json 바이트 배열을 json 노드 객체로 역직렬화
JsonNode readTree(파일 파일) 로컬 json 파일을 json 노드 개체로 역직렬화합니다.

Java 객체 및 Json 노드 객체 변환

T convertValue(객체 fromValue, 클래스 toValueType) Java 객체(예: POJO, List, Map, Set 등)를 Json 노드 객체로 직렬화합니다.
T treeToValue(TreeNode n, 클래스 값 유형) json 트리 노드 객체는 Java 객체(예: POJO, List, Set, Map 등)로 변환되며 TreeNode 트리 노드는 전체 json 노드 객체 모델의 루트 인터페이스입니다.

추천

출처blog.csdn.net/qq_45297578/article/details/128659147