inblog logo
|
vosw1
    Java

    JSON

    Jan 12, 2024
    JSON

    JSON(JavaScript Object Notation)

    Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷
    데이터 전송(통신)할 때 사용
     
    Json Object: {“키” : 값, “키” : 값 // 문자열 “ ”}
    Java Object : {키:값, 키:값 // 문자열: ‘ ’}
     
    데이터가 하나가 아니고 여러 개면 배열에 넣을 수 있음
    언어마다 각자의 Object를 가지고 있고 다름
    backtick : 한꺼번에 엔터친 문자를 묶을 때 → 파싱을 구문 분석을 못함 → 찾을 수 없음
    스트림을 통해 전송할때 바이트가 연속적으로 내려감 : 모든 경우의 수에서도 모두 문자열로 내려감 → 오브젝트가 아니라서 상대방이 처리하기 불편함
     

    다른 프로그램에게 통신할 때 문제

    1) Object→ 문자열로 인식
    2) 문자열로 변환 → 자바가 이해 못함
    객체 연산자로 .해서 찾을 수 없음/ 파싱 불가

    같은 프로그램끼리 통신할 때 문제

    1) Object→ 문자열로 전송
    3) 문자열 → Object로 변환해야 함
     

    Json 데이터를 자바 Object 데이터로 변환할 때 : 빈 생성자가 필요함

     
    Jackson : Json을 파싱해주는 라이브러리
    ObjectMapper : 빈 생성자를 통해서 객체를 만들어냄
    Reflection : private 접근자에 직접적으로 접근해서 값을 넣어줌
    실행 시에 메모리에 있는 데이터를 다 분석해서 넣어주는 기법
    💡
    Java의 Reflection API가 접근 수준을 무시하는 일부 메커니즘을 제공
    일종의 메타프로그래밍 기법
    실행 중에 클래스의 구조를 조사하고 조작하는 기능을 제공 → private 멤버에도 접근

    파싱 연습문제


    package com.metacoding.myhttp; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; 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.getTitle()); } catch (Exception e) { throw new RuntimeException(e); } } }
    package com.metacoding.myhttp; public class Post { private int userId; private int id; private String title; private String body; public Post() {} public Post(int userId, int id, String title, String body) { this.userId = userId; this.id = id; this.title = title; this.body = body; } public int getUserId() { return userId; } public int getId() { return id; } public String getTitle() { return title; } public String getBody() { return body; } }
    notion image

    lombok 사용 방법


    1) lombok 이라는 외부 라이브러리 설치
    notion image
    notion image
    notion image
     
    2) 인텔리 J에 적용
    notion image
     
    3) 인텔리 J에서 설치 확인 > Lombok 설치 확인 : 안되어있으면 설치
    notion image

    Annotation

    : JVM이 확인하는 주석
    컴파일러에게 추가적인 정보를 제공하거나 런타임 시에 동작을 변경하기 위해 사용
     
    @AllArgsConstructor : 클래스의 모든 필드에 대한 생성자를 자동으로 생성
    @NoArgsConstructor : 매개변수가 없는 기본 생성자를 자동으로 생성
    @Data
    : @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor 다 추가
     
    플러그인(Plugin)
    : 어떤 소프트웨어에 추가적인 기능을 제공하기 위해 모듈 형태로 개발된 소프트웨어 컴포넌트
     
    자기 object를 문자열로 변환하여 전송
    > 문자열로 날아온 json을 사용하기 편하게 java object로 변환
     
    notion image

    Json 사용 이유

    • 경량이 제일 가벼움 : 모든 언어의 object를 제일 적은 용량으로 표현 가능
    • 전세계 표준 공용어
     
    Json이전에 사용하던 것이 xml : 공용어

    연습문제


    package com.metacoding.myhttp; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; 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; } //System.out.println(download); ObjectMapper om = new ObjectMapper(); Post post = om.readValue(download, Post.class); System.out.println("=========================="); System.out.println("check : "+post.getTitle()); } catch (Exception e) { throw new RuntimeException(e); } } }
    class User { int id = 1; String username = "ssar"; } <user> <id>1</id> <username>"ssar"</username> </user> { "id":1, "username":"ssar" }

    Share article

    vosw1

    RSS·Powered by Inblog