[Java] JSON 데이터 파싱 후 저장하기

언교동·2025년 11월 27일

JAVA

목록 보기
3/3
post-thumbnail

JSON 파싱은 어떻게 할까?

목차

  1. JSON이란?
  2. 의존성 추가
  3. JSON 파싱 기본 개념
  4. JSON 파싱 방법

JSON이란?

JSON(JavaScript Object Notation)은 키-값 쌍을 사용하여 데이터를 계층적 방식으로 표현하는 데이터 형식입니다.

JSON 예제

{
  "name": "Jane Smith",
  "age": 35,
  "city": "San Francisco",
  "phone": "014158889275",
  "email": "janesmith@sample.com"
}

특징

  • 웹 개발에서 서버와 웹 애플리케이션 간 데이터 교환에 널리 사용
  • 사람이 읽고 쓰기 쉬운 텍스트 기반 형식
  • 프로그래밍 언어와 플랫폼에 독립적

의존성 추가

Gradle

dependencies {
    // JSON-Simple
    implementation 'com.googlecode.json-simple:json-simple:1.1.1'
    
    // 또는 Jackson (Spring Boot에 기본 포함)
    implementation 'com.fasterxml.jackson.core:jackson-databind'
}

Maven

<dependencies>
    <!-- JSON-Simple -->
    <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>1.1.1</version>
    </dependency>
    
    <!-- 또는 Jackson -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.15.2</version>
    </dependency>
</dependencies>

참고: Spring Boot 프로젝트는 Jackson이 기본으로 포함되어 있어 별도 추가가 필요 없음!


JSON 파싱 기본 개념

JSON 파싱이란?

JSON 문자열을 프로그래밍 언어의 데이터 구조로 변환하는 과정을 의미

주요 클래스/라이브러리

클래스/라이브러리역할특징
JSONParserJSON 문자열을 파싱하여 JSON 객체/배열 생성파싱 전용
JSONObject키-값 형태로 데이터 저장 (Map<String, Object> 구조)put(), get() 메서드 제공
JSONArray여러 JSON 객체를 담는 배열 컨테이너배열 순회 및 접근
ObjectMapperJSON ↔ Java 객체 자동 변환 (Jackson)타입 안정성, 자동 매핑

JSON 파싱 방법

1. JSON-Simple

특징

  • 가볍고 단순한 JSON 라이브러리
  • 복잡한 기능 없음
  • 수동 타입 변환 필요

언제 사용?

  • JSON 데이터가 이미 String 형태로 존재할 때
  • .json 파일에서 Reader를 통해 텍스트를 읽어들일 때

예제

import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.json.simple.JSONObject;

public class JsonSimpleExample {
    public static void main(String[] args) {
        String jsonString = "{\"title\":\"Java 연습\",\"pages\":120}";
        
        try {
            JSONParser parser = new JSONParser();
            JSONObject obj = (JSONObject) parser.parse(jsonString);
            
            String title = (String) obj.get("title");
            Long pages = (Long) obj.get("pages");
            
            System.out.println("title: " + title);
            System.out.println("pages: " + pages);
        } catch (ParseException e) {
            System.out.println("파싱 오류: " + e.getMessage());
        }
    }
}

출력

title: Java 연습
pages: 120

단점

  • 타입 변환을 직접 처리해야 함 ((String), (Long) 등)
  • 유지보수성이 떨어짐
  • 타입 안정성이 낮음

2. JSONObject (org.json)

특징

  • JSON-Simple보다 조금 더 편리
  • 여전히 수동 파싱 스타일
  • 내부적으로 문자열 파싱 기능 포함

언제 사용?

  • 단일 JSON 객체를 다룰 때
  • 간단한 키-값 접근이 필요할 때

예제

import org.json.JSONObject;

public class JsonObjectExample {
    public static void main(String[] args) {
        String jsonString = "{\"title\":\"Java 연습\",\"pages\":120}";
        
        try {
            JSONObject obj = new JSONObject(jsonString);
            
            String title = obj.getString("title");
            int pages = obj.getInt("pages");
            
            System.out.println("title: " + title);
            System.out.println("pages: " + pages);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

출력

title: Java 연습
pages: 120

단점

  • 자동 매핑 없음 → 매번 key를 꺼내서 수동으로 처리해야 함
  • 타입 안정성이 낮음

JSONParser vs JSONObject

기능JSONParserJSONObject
JSON 문자열 파싱⭕ 매우 잘함⭕ 제한적
데이터 보관❌ 안함⭕ 함 (key-value)
put(), get()❌ 없음⭕ 있음
주 역할문자열 → 객체 변환값을 담고 꺼내기

3. JSONArray

특징

  • [] 대괄호로 감싸진 배열 구조
  • 안에는 여러 개의 JSONObject가 들어감

언제 사용?

[
  { "startTime": 1348, "duration": 0 },
  { "startTime": 1500, "duration": 3 }
]
  • 위와 같이 여러 JSON 객체들을 목록 형태로 나열한 배열
  • 다건 데이터(0~n개)를 담는 타입을 다룰 때

예제

import org.json.JSONArray;
import org.json.JSONObject;

public class JsonArrayExample {
    public static void main(String[] args) {
        String jsonString = "[{\"title\":\"Java 연습\",\"pages\":120}, {\"title\":\"Spring Boot\",\"pages\":300}]";
        
        JSONArray arr = new JSONArray(jsonString);
        
        for (int i = 0; i < arr.length(); i++) {
            JSONObject obj = arr.getJSONObject(i);
            String title = obj.getString("title");
            int pages = obj.getInt("pages");
            
            System.out.println("title: " + title);
            System.out.println("pages: " + pages);
            System.out.println("---");
        }
    }
}

출력

title: Java 연습
pages: 120
---
title: Spring Boot
pages: 300
---

4. Jackson ObjectMapper

특징

  • JSON을 직접 JSONObject/JSONArray로 다루는 것이 아니라, Java 클래스(DTO)에 바로 매핑
  • JSON ↔ 객체 자동 변환
  • 타입 안정성, 유지보수성, 코드 깔끔함

언제 사용?

  • 복잡한 JSON 구조를 다룰 때
  • 타입 안정성이 중요한 프로젝트
  • Spring Boot 프로젝트 (기본 포함)

주요 메서드

메서드설명예시
readValue()JSON → Java 객체 변환User user = mapper.readValue(json, User.class);
writeValueAsString()Java 객체 → JSON 문자열 변환String json = mapper.writeValueAsString(user);
writeValue()Java 객체 → JSON 파일 저장mapper.writeValue(new File("user.json"), user);

예제

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
class User {
    private String name;
    private int age;
}

public class ObjectMapperExample {
    public static void main(String[] args) throws JsonProcessingException {
        String json = "{\"name\":\"Bob\",\"age\":30}";
        
        ObjectMapper mapper = new ObjectMapper();
        
        // JSON → Java 객체
        User user = mapper.readValue(json, User.class);
        System.out.println("name: " + user.getName());
        System.out.println("Age: " + user.getAge());
        
        // Java 객체 → JSON
        String jsonString = mapper.writeValueAsString(user);
        System.out.println("JSON: " + jsonString);
    }
}

출력

name: Bob
Age: 30
JSON: {"name":"Bob","age":30}

장점

  • 타입 안정성 보장
  • 자동 매핑으로 코드 간결
  • 유지보수 용이
  • Spring Boot와 완벽 통합

방법별 비교 요약

방법타입 안정성코드 간결성유지보수성권장도
JSON-Simple⭐⭐⭐⭐
JSONObject⭐⭐⭐⭐⭐⭐⭐⚠️
JSONArray⭐⭐⭐⭐⭐⭐⭐⚠️
Jackson ObjectMapper⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

참고 자료

0개의 댓글