본문 바로가기

공부

JSON 사용 설명서

머릿말


JSON에 대해 접해볼 기회가 생겼고, 사용하면서 공부한 내용과 기존의 개념들을 정리하기 위해 글을 쓰려합니다.

저의 모자란(?) 머리로도 이해한 내용들을 최대한 쉽게 풀어 쓰려고 합니다.

처음접해본 분부터 JSON사용법을 찾아온 분까지 많은 정보를 얻어가셨으면 합니다.

 

 

 

JSON 개요


 Q1) JSON이 뭐에요?

https://www.json.org/json-ko.html

 

JSON

JSON (JavaScript Object Notation)은 경량의 DATA-교환 형식이다. 이 형식은 사람이 읽고 쓰기에 용이하며, 기계가 분석하고 생성함에도 용이하다. JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999의 일부에 토대를 두고 있다. JSON은 완벽하게 언어로 부터 독립적이지만 C-family 언어 - C, C++, C#, Java, JavaScr

www.json.org

 A) JSON은 쉽게 생각하면 데이터의 덩어리입니다. 

 

저희가 좋아하는 택배를 생각해봅시다. 물건을 주문하고, 쇼핑몰에서 택배를 보낸다 생각해보세요.

택배를 보내기 위해서 무엇이 필요할까요?

 

  • 보내는 사람의 이름, 주소, 연락처
  • 받는 사람의 이름, 주소, 연락처
  • 물건

간단하게 생각해보면 이정도가 필요하겠네요.

상자에 물건을 넣고, 상자에 보내는 사람의 정보와 받는사람의 정보를 적었습니다.

상자가 JSON입니다. 우리가 원하는 것을 보내고 받는데 사용하는 데이터의 덩어리입니다.

상자(JSON)에 물건과 필요한정보(데이터)를 담아 택배(네트워크)를 보내는 것(데이터를 주고받음)과 같습니다.

 

 Q2) 왜 JSON을 사용해요?

 A) 읽고 쓰는것도 편한데, 어디에서나 쓸 수 있습니다.

 

JSON은 네트워크 환경에서 데이터를 주고 받는데 사용합니다.

왜 굳이 이것(JSON)을 사용하냐고 물어보신다면,

  • 이게 사람이 읽고 쓰는게 쉽습니다. 게다가 기계가 읽고 쓰기에도 쉽습니다.
  • 또, JSON의 JS가 JavaScript를 의미하지만, 굳이 JavaScript뿐만 아니라 많은 프로그래밍 언어( C, Java, C++ 등 )에서 사용할 수 있습니다.

이런 특징들이 네트워크 환경에서 사용하기에 적합하기에 JSON이 많이 쓰입니다.

 

 

 

예제로 알아보는 JSON


JSON을 만들어 보자.

실제로 사용하는 JSON에 대해서 알아보려면 '꼬라박'해보는게 가장 이해하기 쉽습니다.

저희가 직접 JSON을 만들어 봅시다.

박소똥이가 김개똥이에게 택배를 보냅니다.

이걸 JSON으로 만들어 보겠습니다.

  1. 가장먼저 껍데기를 만듭니다. 

    { }

  2. 크게 구별해보면 받는 사람과, 보내는 사람이 있습니다. 이를 쉼표( , )로 구분하여 넣어줍니다.
     

    JSON에서 String값은 ""(큰따옴표)안에 넣어줍니다. 

    {

    "받는 사람",

    "보내는 사람"

    }

  3. JSON은 모든 값이 key-value 쌍으로 되어있습니다. key는 이름이고, value는 값입니다.

    2번에서는 이름(key)만 작성해주었기때문에 각각의 이름(key)에 값(value)을 달아줍니다.

    이름 : 값 << 의 형태로 작성해주시면 됩니다. 

    {

    "받는 사람" : (받는 사람의 값),

    "보내는 사람" : (보내는 사람의 값) 

    }

  4. 받는 사람의 값부터 넣어 보도록 하겠습니다. 

    받는 사람의 내용으로는 이름, 주소, 연락처가 있고 해당 값들을 넣어주면 되겠습니다.

    받는 사람의 값은 1개인데 넣어야 할 내용은 3개입니다. 이럴경우 { }을 사용해주면 됩니다.

    { }의 의미는 괄호안의 내용이 한개의 '객체'(key-value쌍들의 모임)임을 의미합니다. 

    즉, 개똥이의 이름과 주소, 연락처는 받는사람 '객체'의 값이 되는 겁니다.

    {

    "받는 사람" : {

                          "이름" : "김개똥",

                          "주소" : "대한민국 서울특별시 광진구 개똥이네 집",

                          "연락처" : "010-1234-5678"

                        },

    "보내는 사람" : (보내는 사람의 값)

    }

  5. 이제 보내는 사람의 값도 마저 넣어보겠습니다.

    {

    "받는 사람" : {

                          "이름" : "김개똥", 

                          "주소" : "대한민국 서울특별시 광진구 개똥이네 집",

                          "연락처" : "010-1234-5678"

                        },

    "보내는 사람" : {

                            "이름" : "박소똥",

                            "주소" : "대한민국 서울특별시 성동구 소똥이네 집",

                            "연락처" : (연락처의 값)

                           }

    }

  6. 소똥이는 연락처가 2개인데 이것도 { } 으로 넣어야 할까요??

    { }으로 넣으면 어떻게 될까요?? key값이 2개 있어야겠죠?

    ex) "연락처" : { "연락처1" : (연락처1의 값),

                            "연락처2" : (연락처2의 값) }

    이방법 보다는 [ ]을 이용합니다. { }가 key-value쌍의 모임이라면, 

    [ ] 은 저희가 흔히 아는 배열(array)입니다.

    ex) "연락처" : [ "010-9876-5432", "02-523-6789" ]

    이렇게 작성하시면 됩니다.

최종적으로 저희가 완성한 JSON은 다음과 같습니다.

{
"받는 사람" : {
                      "이름" : "김개똥", 
                      "주소" : "대한민국 서울특별시 광진구 개똥이네 집",
                      "연락처" : "010-1234-5678"
                    },
"보내는 사람" : {
                        "이름" : "박소똥",
                        "주소" : "대한민국 서울특별시 성동구 소똥이네 집",
                        "연락처" : ["010-9876-5432", "02-523-6789"]
                       }
}

 

정리를 해보겠습니다.

  • key에는 항상 문자열이 옵니다. JSON에서 문자열(String)은 항상 " "(큰따옴표)로 값을 싸주어야 합니다.
  • value에는 숫자(Number), 문자열(String), 참거짓(boolean), { }(객체), [ ](배열), null(빈값) 이 올 수 있습니다.
    value에 올 수 있는 값들을 기본자료형이라고 합니다.
    문자열을 제외한 숫자, 참거짓, 객체, 배열, 빈값은 " "(큰따옴표)로 값을 싸면 안됩니다.
  • { }(중괄호)는 객체를 의미합니다. 여기서 객체란, key-value쌍의 집합입니다. 
    즉, 중괄호 안에는 key-value쌍 만이 올 수 있습니다.
  • [ ](대괄호)는 배열을 의미합니다. 
    대괄호 안으로는 value에 올 수 있는 값(기본자료형)이 올 수 있습니다.
  • 각 값들은 ,(쉼표)로 구별하여 줍니다.

백마디 말보다 그림..

 

https://ko.wikipedia.org/wiki/JSON

이곳에 좀 더 자세하게 표현되어있습니다.

 

JSON - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. JSON(제이슨[1], JavaScript Object Notation)은 속성-값 쌍( attribute–value pairs and array data types (or any other serializable value)) 또는 "키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다. 비동기 브라우저/서버 통신 (AJAX)을 위해, 넓게는 XML(AJA

ko.wikipedia.org

 Q3) 매번 이렇게 힘들게 만들어 줘야 하나요??

 A) 아닙니다. 구글에 "JSON 생성기"라고 검색하시면 손쉽게 JSON을 만들어 주는 사이트들이 많이 있습니다.

 

 Q4) 문자열안에 "(큰따옴표)를 쓰고 싶은데 이럴 경우에는 어떡하나요??

 A) 위에 있는 위키백과에 가서 문자열 항목을 보시면 방법을 제시하고 있습니다. 

 

 

 

JSON 분석 방법

만드는 과정을 따라오신 분이라면, 분석은 이제 척척할 수 있을겁니다.

JSON의 특징중 하나가 사람이 읽고 쓰기 편하다는 것입니다. 충분히 하실수 있습니다!

 

 Q5) JSON이 위의 것처럼 예쁜 모양으로 오지 않고, 한줄로 옵니다 ㅜㅜ

 A){"받는사람":{"이름":"김개똥","주소":"대한민국 서울특별시 광진구 개똥이네집","연락처":"010-1234-5678"}} 이런식으로 되어있을 경우, 구글에 'JSON parser'라 검색하시면 많은 사이트들이 해당 값을 보기 좋게 바꾸어 줍니다.

 

 

 

JSON Parsing


Parsing이란?

JSON을 왜 쓰는지도, 어떻게 만드는지도 알았습니다. 이제는 어떻게 사용하는지에 대한 내용입니다.

즉, 기계가 JSON 읽는 방법에 대한 내용입니다.

JSON에는 3가지 종류의 데이터가 있습니다. key-value쌍, { }(객체), [ ](배열) 입니다.

이 데이터들을 기계가 인식 하도록 하면 됩니다. 

저는 Java를 이용해 이것들을 Parsing 해보겠습니다.

 

Java를 이용한 JSON Parsing

Java에는 JSONObject, JSONArray의 클래스로 해당 값들을 인식합니다.

한개씩 차례대로 알아 봅시다.

  • JSONObject

    { }(객체)와 key-value쌍을 위한 클래스입니다. 객체와 key-value쌍을 인식할 수 있습니다.

  • JSONArray

    [ ](배열)을 위한 클래스입니다. 배열을 인식할 수 있습니다.

**사용예제들에 대해서는 추후 업로드 예정.

GSON을 이용한 JSON Parsing

위의 값들을 이용하는것이 수동으로 Parsing하는 부분입니다.
이 부분을 자동으로 해결해주는것이 GSON입니다.

위에서 자꾸 객체라는 단어가 나오는데 Java가 어떤 언어입니까? 객체 지향 언어입니다.

둘다 객체를 사용하죠? 

  • JSON 객체를 Java의 객체로 만들어주는것.
  • Java의 객체를 JSON 객체로 만들어 주는것.

이것을 자동으로 해주는것이 GSON입니다.

 

 Q6) GSON은 어떻게 JSON객체를 Java의 객체로 만들어주나요??

 A) key값을 기준으로 일치하는 Java의 변수명을 찾아, 해당 변수에 value값을 넣어줍니다.

 

 Q7) key값을 한글문자열으로 해두었는데, Java객체의 변수명을 한글로 할수가 없어요.. 어떡하죠??
 A) '@SerializedName("한글")'을 변수위에 써주시면 key값이 한글 문자열이여도 value를 받아올 수 있습니다.