본문 바로가기
Web/Spring

[Spring/Java] JSON 파싱하기 (Jackson 라이브러리)

by char_lie 2024. 4. 20.
반응형
JSON 파싱

- JSON은 Object, Array, Key-Value 형태로 이루어져 있으며 String, Int, Long, Boolean 등의 타입을 지원

- Java에선 JSON을 그대로 사용할 수 없으므로 변환을 하여 사용해야 함.

- Jackson 라이브러리를 활용하여 객체 생성 및 변환하여 파싱

 

1. Jackson 라이브러리 추가하기

// Maven
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    버전...
</dependency>

 

// gradle
implementation 'com.fasterxml.jackson.core:jackson-databind:버전'
반응형

2. 파싱하기(readTree 사용)

readTree()를 사용하면 Json의 형태가 key-value 단일 형태이든, Array가 포함되어있던, 여러 개의 하위 객체가 있던 읽어올 수 있다.

단일 Key-value 형태일 경우

import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
    public static void main(String[] args) {
        // JSON 파일 (request 데이터일 경우 request)
        String jsonFile = "data.json";   
        
        // ObjectMapper 객체 생성
        ObjectMapper objectMapper = new ObjectMapper();
        
        // JSON 파일을 Java 객체로 읽기
        JsonNode rootNode = objectMapper.readTree(new File(jsonFile));
        JsonNode valueNode = rootNode.get("key1");
        
        // 각각의 데이터 형태에 따른 값
		String value = valueNode.asText();
        int intValue = rootNode.get("intValue").asInt();
		boolean boolValue = rootNode.get("boolValue").asBoolean();
		
    }
}

 

여러 객체로 이루어 진 경우

{
  "object1": {
    "key1": "value1",
    "key2": "value2"
  },
  "object2": {
    "key1": "value3",
    "key2": "value4"
  }
}
import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
    public static void main(String[] args) {
        // JSON 파일 (request 데이터일 경우 request)
        String jsonFile = "data.json";   
        
        // ObjectMapper 객체 생성
        ObjectMapper objectMapper = new ObjectMapper();
        
        // JSON 파일을 Java 객체로 읽기
        JsonNode rootNode = objectMapper.readTree(new File(jsonFile));
        
        // object1에 접근하기
        JsonNode object1Node = rootNode.get("object1");
      	String value1 = object1Node.get("key1").asText();
        String value2 = object1Node.get("key2").asText();
		
    }
}

 

배열이 들어있는 경우

{
  "array": [
    {"key1": "value1"},
    {"key1": "value2"}
  ]
}
import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
    public static void main(String[] args) {
        // JSON 파일 (request 데이터일 경우 request)
        String jsonFile = "data.json";   
        
        // ObjectMapper 객체 생성
        ObjectMapper objectMapper = new ObjectMapper();
        
        // JSON 파일을 Java 객체로 읽기
        JsonNode rootNode = objectMapper.readTree(new File(jsonFile));
        
        // object1에 접근하기
        JsonNode arrayNode = rootNode.get("array");
        for (JsonNode element : arrayNode) {
            String value = element.get("key1").asText();
        }
		
    }
}

 

반응형

댓글