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

Java에서 JSON-lib API를 사용해 타입 힌트 없이 빈(Bean)을 XML로 변환하는 방법

JSON-lib는 Java 빈(Bean), Map, 배열, 컬렉션 등을 JSON 형식으로 직렬화하고 역직렬화할 수 있게 해주는 Java 라이브러리입니다.

빈을 XML로 변환할 때 타입 힌트(type hints)를 제외하고 싶다면 XMLSerializer 클래스의 setTypeHintsEnabled() 메서드를 활용하면 됩니다. 이 메서드는 JSON 타입 정보를 XML 속성으로 포함할지 여부를 설정하며, 인자로 false를 전달하면 XML에서 타입 힌트가 비활성화됩니다.

메서드 구문

public void setTypeHintsEnabled(boolean typeHintsEnabled)

예제 코드

아래 예제는 Employee 빈 객체를 생성한 후, 먼저 JSON으로 변환하고 이어서 타입 힌트 없이 XML 문자열로 직렬화하는 과정을 보여줍니다.

import net.sf.json.JSONObject;
import net.sf.json.xml.XMLSerializer;

public class ConvertBeanToXMLNoHintsTest {
   public static void main(String[] args) {
      Employee emp = new Employee("Krishna Vamsi", 115, 30, "Java");

      // 빈 객체를 JSONObject로 변환
      JSONObject jsonObj = JSONObject.fromObject(emp);
      System.out.println(jsonObj.toString(3)); // 보기 좋게 출력된 JSON

      // XMLSerializer 생성 후 타입 힌트 비활성화
      XMLSerializer xmlSerializer = new XMLSerializer();
      xmlSerializer.setTypeHintsEnabled(false); // 이 메서드가 타입 힌트를 비활성화함

      String xml = xmlSerializer.write(jsonObj);
      System.out.println(xml);
   }

   public static class Employee {
      private String empName, empSkill;
      private int empId, age;

      public Employee(String empName, int empId, int age, String empSkill) {
         super();
         this.empName = empName;
         this.empId = empId;
         this.age = age;
         this.empSkill = empSkill;
      }
      public String getEmployeeName() {
         return empName;
      }
      public int getEmployeeId() {
         return empId;
      }
      public String getEmployeeSkill() {
         return empSkill;
      }
      public int getAge() {
         return age;
      }
   }
}

실행 결과

{
   "employeeName": "Krishna Vamsi",
   "employeeSkill": "Java",
   "employeeId": 115,
   "age": 30
}
<?xml version="1.0" encoding="UTF-8"?>
<o>
   <age>30</age>
   <employeeId>115</employeeId>
   <employeeName>Krishna Vamsi</employeeName>
   <employeeSkill>Java</employeeSkill>
</o>

결과 분석

실행 결과를 살펴보면 다음과 같은 특징을 확인할 수 있습니다.

  • JSON 출력: Employee 객체의 getter 메서드 이름을 기반으로 속성명이 자동 생성되어 JSON 형태로 출력됩니다.
  • 타입 힌트 비활성화 효과: setTypeHintsEnabled(false)를 호출했기 때문에 최종 XML에는 type, class 같은 타입 관련 속성이 포함되지 않고, 순수하게 데이터 값만 태그로 표현됩니다.

만약 타입 힌트를 기본값(true)으로 두면 각 요소에 type="string", type="number"와 같은 속성이 추가되어 XML 구조가 복잡해집니다. 따라서 깔끔한 XML 출력이 필요한 경우 이 메서드에 false를 전달하는 것이 유용합니다.