본문 바로가기
Study/RND group

About Json

by 태하팍 2017. 6. 9.
반응형
개 요
about Json
관련 개념
marshalling/unmarshalling 
encoding/decoding
예제
기본적인 코드 구현
확장
관련 된 확장 개념 등

개요
JSON (JavaScript Object Notation)은 경량의 DATA-교환 형식이다. 
이 형식은 사람이 읽고 쓰기에 용이하며, 기계가 분석하고 생성함에도 용이하다.

왜 Json을 사용하는가?
  1. 경량의 데이터 포맷(XML보다)
  2. 간단한 포맷(가독성이 좋음)
  3. 기존 XML보다 다양한 데이터 타입 제공(string, number, boolean), xml은 only string

Json이 가지는 형식


object는 name/value 쌍들의 비순서화된 SET이다. 
object는 { (좌 중괄호)로 시작하고 } (우 중괄호)로 끝내어 표현한다. 
각 name 뒤에 : (colon)을 붙이고 , (comma)로 name/value 쌍들 간을 구분한다.


예제) 
{
    "acet": "박태하",
    "ace-t": "terry"
}



array은 값들의 순서화된 collection 이다. array는 [ (left bracket)로 시작해서 ] (right bracket)로 끝내어 표현한다. 
, (comma)로 array의 값들을 구분한다.

예제 1)
{
    "acet": [
        {
            "name": "박태하",
            "age": 100,
            "job": "developer"
        }, {
            "name": "테리팍",
            "age": 60,
            "job": "architector"
        }
    ]
}

예제 2)
{
    "acet": [
     {
        "name": "박태하",
        "age": 100,
        "job": "developer"
    }, {
        "name": "테리팍",
        "age": 60,
        "job": "architector"
    }
   ],
    "terry": [
     {
        "name": "으라차차",
        "age": 29,
        "job": "백수"

    }
   ]
}


관련 개념
  • encoding/decoding
    • encoding은 말 그래도 코드를 만드는 것.
      • 소스코딩 : 코드를 압축하는 과정
      • 채널코딩 : 데이터를 압축하는 것이 아니라 반대로 더 늘리는 알고리즘.
    • decoding은 만들어진 코드를 푸는 것.
  • 왜 encoding/decoding을 사용하는가? 효율적, 안전성, 신뢰성 때문에

  • Json marshalling/unmarshalling 
    • marshalling : Object ->  Json
      • 아래의 golang 예제를 보면 jsonBytes, err := json.Marshal(mem) 의 리턴은 byte[]과 error 객체이다. 
      • 그런데 보통 byte[] 가 아닌 Json으로 인코딩된 바이트 배열이다. 
    • unmarshalling : Json -> Object


예제
  • go lang
    • package main

      import (

          "encoding/json"

          "fmt"

      )

      //Member -

      type Member struct {

          Name   string

          Age    int

          Active bool

      }

      func main() {

          // Go 구조체 데이터

          mem := Member{}

          mem.Name = "오광봉"

          mem.Age = 80

          mem.Active = true     

          // JSON 인코딩

          jsonBytes, err := json.Marshal(mem)

          if err != nil {

              panic(err)

          } 

          // JSON 바이트를 문자열로 변경

          jsonString := string(jsonBytes)

          fmt.Println(jsonString)  

         json.Unmarshal(jsonBytes, &mem)

          fmt.Println(mem.Name)


      } 




반응형

'Study > RND group' 카테고리의 다른 글

RND 스터디  (0) 2017.05.01