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 빈 객체가 성공적으로 생성된 것을 확인할 수 있습니다.