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

Java에서 JSON-lib API를 활용해 Map을 JSONObject로 변환하는 방법

JSONObject는 순서가 없는 이름/값(name/value) 쌍의 집합이며, Map은 키(key)를 값(value)에 매핑하는 객체입니다. Map에는 중복된 키를 포함할 수 없으며, 각 키는 최대 하나의 값에만 매핑될 수 있습니다.

Map 객체를 JSON 형식으로 직렬화(serialization)하거나 역직렬화(deserialization)하려면 JSON-lib 라이브러리가 필요합니다. 기본적인 절차는 다음과 같습니다.

  1. 먼저 POJO 클래스를 생성합니다.
  2. POJO 인스턴스를 Map 클래스의 put() 메서드에 인수로 전달하여 저장합니다.
  3. 마지막으로 해당 Map 인스턴스를 JSONObject의 accumulateAll() 메서드에 추가하면 Map의 모든 키-값 쌍이 JSON 객체로 병합됩니다.

메서드 문법

public void accumulateAll(Map map)

참고: JSON-lib 라이브러리를 프로젝트에서 사용하려면 다음과 같이 Maven 의존성을 추가해야 합니다.

<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier>
</dependency>

아래 예제에서는 Map을 JSON 객체로 변환하는 전체 과정을 확인할 수 있습니다.

예제

import java.util.*;
import net.sf.json.JSONObject;

public class ConvertMapToJSONObjectTest {
    public static void main(String[] args)throws Exception {
        JSONObject jsonObject = new JSONObject();
        Map<Integer, Employee> employees = new HashMap<Integer, Employee>();

        employees.put(1, new Employee("Adithya", "Jai", 30));
        employees.put(2, new Employee("Vamsi", "Krishna", 28));
        employees.put(3, new Employee("Chaitanya", "Sai", 30));

        jsonObject.accumulateAll(employees);
        System.out.println(jsonObject.toString(3)); // pretty print JSON
    }
    public static class Employee {
        private String firstName, lastName;
        private int age;
        public Employee(String firstName, String lastName, int age) {
            super();
            this.firstName = firstName;
            this.lastName = lastName;
            this.age = age;
        }
        public String getFirstName() {
            return firstName;
        }
        public String getLastName() {
            return lastName;
        }
        public int getAge() {
            return age;
        }
    }
}

실행 결과

{
 "1": {
 "firstName": "Adithya",
 "lastName": "Jai",
 "age": 30
 },
 "2": {
 "firstName": "Vamsi",
 "lastName": "Krishna",
 "age": 28
 },
 "3": {
 "firstName": "Chaitanya",
 "lastName": "Sai",
 "age": 30
 }
}

위 출력 결과에서 볼 수 있듯이, Map의 각 키(Integer 값 1, 2, 3)는 JSON 객체 내에서 문자열 키로 변환되며, 각 Employee POJO 객체는 이름(first Name), 성(lastName), 나이(age) 속성을 가진 중첩 JSON 객체로 직렬화됩니다. 또한 toString(3) 메서드에 들여쓰기 수준을 지정하면 사람이 읽기 쉬운 형태(pretty print)로 JSON을 출력할 수 있습니다.