JSON(JavaScript Object Notation) 활용해보기

Jan 12, 2024
JSON(JavaScript Object Notation)  활용해보기
 
JSON)은 Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷이다.
notion image
데이터가 바이트스트림을 통해 전달되면 어떤 타입의 자료형이든 문자열 타입으로 전송된다.
하지만 문자열로 자료가 전송되면 두 가지 문제가 있다.
 
하나는 문자열로 전송되기 때문에 파싱을 할 수가 없고, 다른 하나는 오브젝트로 변환이 됐다 해도, 다른 언어로 만들어진 오브젝트를 내가 사용하는 언어와 문법이 다르다는 문제가 있다. 이것을 해결하기 위해 JSON 을 사용한다.
 
JSON 은 영어와 같은 공통어로 모든 프로그램 언어에서 사용할 수 있다. JavaScript 로 전송된 데이터는 JSON 으로 변환된 후 다시 Java 형태로 변환된다.
 
💡
파싱(parsing) 은 데이터를 분석하고 해석하는 과정이다.

JSON 라이브버리 받기

 
 
위의 주소에서 원하는 버전을 선택한다.
 
notion image
 
 
Gradle 을 선택 후 아래의 주소를 복사한다. 그리고 아래의 주소도 같이 복사한다.
 
implementation group: 'org.springframework', name: 'spring-webflux', version: '5.0.2.RELEASE'
 
 
notion image
 
인텔리J 의 build.gradle - dependencies 에 붙여넣은 후 오른쪽 상단의 코끼리 그림을 누르면 설치가 완료된다.
 

JSON 을 활용해 JavaScript 자료 출력하기

 
 
위의 사이트를 접속한다. Fake JSON API 란 임의로 개발한 API 에 대해 고정된 응답값을 보내주는 테스트용 API를 의미한다.
 
notion image
 
 
사이트의 posts 를 들어가면 여러 데이터가 있는데 그중 userId가 1인 자료 값을 받아보자.
 
// https://jsonplaceholder.typicode.com/posts/1 { "userId": 1, "id": 1, "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto" }
 
{} 내부에 있는 자료형이 전송되면 바이트스트림을 타고 문자열로 전송된다.
문자열로 전송되면 내부에 있는 userId 나 id 값을 파싱할 수 없기 때문에 JSON 을 활용한다.
 
이제 코드를 만들어보자.
 
URL url = new URL("https://jsonplaceholder.typicode.com/todos/1"); HttpURLConnection conn = (HttpURLConnection) url.openConnection();
 
new URL 을 통해 주소를 받을 객체를 만든다. openConnection() 은 HTTP 프로토콜이 적용된 서브소켓이고, conn 은 소켓이다.
 
public class MyApp2 { public static void main(String[] args) { try { URL url = new URL("https://jsonplaceholder.typicode.com/posts/1"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String download = ""; while (true) { String line = br.readLine(); if (line == null) break; download = download + line; } ObjectMapper om = new ObjectMapper(); Post post = om.readValue(download, Post.class); System.out.println(post.getBody()); } catch (MalformedURLException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } } }
 
버퍼를 통해 데이터를 받고, readLine 을 통해 문자열을 읽는다.
download 은 외부로 부터 받은 문자열을 저장하는 변수다.
 
ObjectMapper 은 Jackson 라이브러리에서 제공되는 클래스로 JSON 문자열을 변환할 때 사용된다.
ObjectMapper 사용하기 위해서는 문자열을 저장할 오브젝트 클래스가 필요하다.
 
public class Post { int userId ; int id ; String title ; String body ; public int getUserId() { return userId; } public int getId() { return id; } public String getTitle() { return title; } public String getBody() { return body; } }
 
커스텀 자료형 클래스를 만들고 값을 출력하기 위한 getter까지 만들었다.
ObjectMapper 를 사용하기 위해선 커스텀 클래스에 디폴트 생성자가 반드시 필요하다.
지금은 매개변수가 있는 생성자가 없기 때문에 생성자를 만들지 않아도 자동으로 적용된다.
 
이제 전송된 데이터 문자열을 post.getBody() 같은 getter 를 통해 출력받을 수 있고 toStirng 값으로 출력할 수도 있다.
notion image
Share article

{CODE-RYU};