Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java JSON-lib API로 JSON 문자열을 빈(Bean) 객체로 변환하는 방법

JSON-lib자바 빈(Java Bean), 맵(Map), 배열(Array), 컬렉션(Collection)을 JSON 형식으로 직렬화(serialize)하고 역직렬화(deserialize)할 수 있는 자바 라이브러리입니다. JSON 문자열을 빈 객체로 변환하려면 크게 두 단계를 거칩니다. 첫 번째는 문자열을 JSONObject로 변환하는 것이고, 두 번째는 해당 JSONObject를 자바 빈 객체로 매핑하는 것입니다.

구문(Syntax)

public static Object toBean(JSONObject jsonObject, Class beanClass)

toBean() 메서드는 JSONObject와 대상 빈 클래스의 Class 객체를 인자로 받아, JSON 데이터의 키와 일치하는 필드에 값을 자동으로 할당한 빈 인스턴스를 반환합니다.

예제 코드

다음 프로그램은 JSON 문자열을 Student 빈 객체로 변환하는 전체 과정을 보여줍니다.

import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
public class ConvertJSONStringToBeanTest {
    public static void main(String[] args) {
        String jsonStr = "{\"firstName\": \"Adithya\", \"lastName\": \"Sai\", \"age\": 30, \"technology\": \"Java\"}";
        JSONObject jsonObj = (JSONObject)JSONSerializer.toJSON(jsonStr); // 문자열을 JSON 객체로 변환
        System.out.println(jsonObj);

        Student student = (Student)JSONObject.toBean(jsonObj, Student.class); // JSON 객체를 빈으로 변환
        System.out.println(student.toString());
    }
    public static class Student {
        private String firstName;
        private String lastName;
        private int age;
        private String technology;
        public Student() {
        }
        public String getFirstName() {
            return firstName;
        }
        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }
        public String getLastName() {
            return lastName;
        }
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getTechnology () {
            return technology;
        }
        public void setTechnology(String technology) {
            this.technology = technology;
        }
        public String toString() {
            return "Student[ " +
            "firstName = " + firstName +
            ", lastName = " + lastName +
            ", age = " + age +
            ", technology = " + technology +
            " ]";
        }
    }
}

핵심 포인트 정리

  • JSONSerializer.toJSON(): JSON 형식의 문자열을 net.sf.json.JSONObject 객체로 변환합니다.
  • JSONObject.toBean(): JSONObject를 지정한 클래스 타입의 자바 빈 객체로 변환합니다. 이때 JSON 키 이름과 빈의 필드 이름(및 getter/setter)이 일치해야 올바르게 매핑됩니다.
  • 변환 대상 클래스에는 반드시 기본 생성자(no-arg constructor)가 있어야 하며, 각 필드에 대한 getter/setter 메서드를 제공하는 것이 좋습니다.
  • JSON-lib를 사용하려면 프로젝트에 json-lib 라이브러리와 함께 commons-beanutils, commons-collections, commons-lang, ezmorph 등의 의존성도 함께 추가해야 합니다.

실행 결과

{"firstName":"Adithya","lastName":"Sai","age":30,"technology":"Java"}
Student[ firstName = Adithya, lastName = Sai, age = 30, technology = Java ]

위 실행 결과에서 볼 수 있듯이, JSON 문자열이 먼저 JSONObject로 출력되고, 이어서 toBean() 메서드를 통해 각 필드 값이 채워진 Student 빈 객체가 성공적으로 생성된 것을 확인할 수 있습니다.