FastJSON - POJO를 JSON으로/에서 변환

Fastjson은 Alibaba에서 만든 경량 Java 라이브러리입니다. POJO(Plain Old Java Object)를 JSON 표현으로 변환하고 JSON 문자열을 동등한 POJO로 변환하는 데 사용할 수 있습니다. Fastjson은 소스 코드가 없는 기존 개체를 포함하여 임의의 Java 개체와 함께 작동할 수 있습니다.

이 라이브러리가 Java 개체를 JSON으로/에서 쉽게 변환하는 API를 제공하는 방법을 살펴보기 위해 예제로 바로 들어가 보겠습니다.
  • pom.xml 파일에서 FastJson 및 Lombok(getters/setters용)에 대해 다음과 같은 종속성이 있는 하나의 간단한 Maven 프로젝트를 생성합니다.

  • <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.example</groupId>
        <artifactId>fast-json-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <maven.compiler.source>11</maven.compiler.source>
            <maven.compiler.target>11</maven.compiler.target>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>2.0.7</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.24</version>
            </dependency>
        </dependencies>
    
    </project>
    


  • 간단한 POJO 직원 클래스와 Main 클래스를 작성하여 JSON으로 변환해 보겠습니다.

  • JSON.toJSONString() 메서드는 Employee 객체를 JSON 문자열로 직렬화하는 데 도움이 됩니다.

    Employee.java

    import com.alibaba.fastjson.annotation.JSONField;
    import lombok.Data;
    
    @Data
    public class Employee {
    
        @JSONField(name = "EmployeeId")
        private Integer id;
    
        @JSONField(name = "EmployeeName")
        private String name;
    
        @JSONField(name = "EmployeeLocation")
        private String location;
    
        @JSONField(name = "EmployeeSalary")
        private Double salary;
    
        public Employee(Integer id, String name, String location, Double salary) {
            this.id = id;
            this.name = name;
            this.location = location;
            this.salary = salary;
        }
    }
    
    


    메인.자바

    import com.alibaba.fastjson2.JSON;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Main {
        public static void main(String[] args) {
    
            List<Employee> employeeList = new ArrayList<>();
    
            employeeList.add(new Employee(1, "Stephen Hawking", "UK", 1000.00));
            employeeList.add(new Employee(2, "Albert Einstein", "Germany", 2000.00));
    
            // Convert Employee object to JSON
            String jsonString = JSON.toJSONString(employeeList);
    
            System.out.println(jsonString);
        }
    }
    
    


    산출:


  • 키-값 쌍의 순서를 제어하여 JSON 출력을 사용자 정의할 수 있습니다. 인수를 ordinal = <nth order>에서 @JSONField로 전달하기만 하면 됩니다.

  •  @JSONField(name = "EmployeeLocation", ordinal = 4)
        private String location;
    
     @JSONField(name = "EmployeeSalary", ordinal = 3)
        private Double Salary;
    


    이전 출력을 이 출력과 비교하면 키의 위치가 지정된 대로 정렬됩니다.


  • serialize=false 매개변수가 있는 일부 필드를 무시하도록 선택할 수 있습니다.

  • @JSONField(name = "EmployeeId", serialize = false)
        private Integer id;
    


  • format="MM/dd/YYYY" 매개변수로 날짜 형식을 선택할 수 있습니다.

  • @JSONField(name = "EmployeeDoJ", format = "MM/dd/YYYY", ordinal = 5)
        private Date dateOfJoining;
    




    이제 JSON을 Java 객체로 구문 분석할 수 있습니다. JSON 문자열, 배열 및 파일을 개체로 변환하는 방법을 살펴보겠습니다.
  • JSON.parseObject(jsonToConvert, Employee.class); 를 사용하여 JSON 문자열을 객체로 변환할 수 있습니다. 여기서 주목해야 할 사항 중 하나는 JSON 문자열에서 누락된 키가 "거짓"으로 기본 설정된다는 것입니다. 또한 특정 필드를 역직렬화하지 않도록 선택한 경우 @JSONField 주석에서 매개변수를 "deserialize=false"로 지정할 수 있습니다.

  • @JSONField(name = "EmployeeId", serialize = false, deserialize = false)
        private Integer id;
    



    // Convert JSON String to Java Object
    String jsonToConvert = "{\"EmployeeName\":\"Stephen Hawking\",\"EmployeeSalary\":1000.0,\"EmployeeLocation\":\"UK\"}";
    System.out.println("JSON to Convert ==> " + jsonToConvert + "\n");
    Employee employeeObj = JSON.parseObject(jsonToConvert, Employee.class);
    System.out.println("Converted to Employee Object ==> " + employeeObj);
    
    



  • JSON.parseArray(jsonArrayToConvert, Employee.class);를 사용하는 Java 객체에 대한 JSON 배열

  • String jsonArrayToConvert = "[{\"EmployeeName\":\"Stephen Hawking\",\"EmployeeSalary\":1000.0,\"EmployeeLocation\":\"UK\"},{\"EmployeeName\":\"Albert Einstein\",\"EmployeeSalary\":2000.0,\"EmployeeLocation\":\"Germany\"}]";
    System.out.println("JSON Array to Convert ==> " + jsonArrayToConvert + "\n");
    List<Employee> employees = JSON.parseArray(jsonArrayToConvert, Employee.class);
    System.out.println("Converted to Employee Objects ==> " + employees);
    



  • JSON 파일에서 Java 개체로 --> FastJson 비트는 직접적인 JSON 파일 지원이 부족합니다. JSON 파일에서 읽으려면 추가 코드가 필요합니다.

  • JSON 파일:


    // Convert JSON File to Java Object
    try (Stream<String> lines = Files.lines(Paths.get("employees.json"))) {
        String jsonContent = lines.collect(Collectors.joining());
        List<Employee> empList = JSON.parseArray(jsonContent, Employee.class);
        System.out.println("Converted to Java Object ==> " + empList);
    } catch (IndexOutOfBoundsException | IOException ex) {
        ex.printStackTrace();
    }
    




    아래 GitHub 리포지토리에서 더 많은 예제를 확인할 수 있습니다.
    https://github.com/eugenp/tutorials/tree/master/json-modules/json-2

    이 정보가 유용했다면 아래에 반응과 의견을 남겨주세요! 건배!!

    좋은 웹페이지 즐겨찾기