Post List

2016년 11월 28일 월요일

Golang에서 Json 변환


Golang API 생각만 해도 귀찮다.
그냥 뭐 다 알고 공식 사이트라던지
저번 포스팅에서 참고했던 블로그라던지 많다.

추가로 작업한 것만 올려보자.

Golang에서 Json 변환을 해봤다.


Struct -> Json


package main

import (
 "encoding/json"
 "fmt"
)

type Animal struct {
 ID    int64  `json:"id"`
 Types string `json:"types"`
 Name  string `json:"name"`
 Sex   string `json:"-"`
 Age   int    `json:"age,omitempty"`
}

func main() {
 animal := Animal{ID: 1, Types: "CAT", Name: "CATIA", Sex: "male"}

 jb, err := json.Marshal(animal)
 if err != nil {
  fmt.Println(err)
  return
 }

 fmt.Println(string(jb))
}


이런식으로 변환하면 된다.

구조체 멤버변수 옆에 태그를 주지 않아도 알아서 변수명으로 만든다.
json 생성될때 이름을 정해주고 싶으면
구조체 멤버변수 옆에 태그로써 json 규칙을 주면 되는데
문자열을 감싼것이   " ' 이런 따옴표, 어파스트로피 이런게 아니고
키보드 숫자1 키 옆에 있는 `(shift ~) 이거다 그레이브 라고 읽는다.

기본으로 이름만 주면 해당 이름으로 json key를 만드는데
`json:"-"` 로 주게 되면 json 생성시 해당 프로퍼티는 제외한다.

`json:"age,omitempty"` 
이런식으로 정의 하면 해당 프로퍼티가 데이터가 없는 기본 값일때
(데이터가 없을때)는 json 생성시 key,value가 만들어지지 않는다.

반대로
json 문자열을 struct 로 하는 법은

Json -> Struct

package main

import (
    "encoding/json"
    "fmt"

)

type Animal struct {
    ID    int64  `json:"id"`
    Types string `json:"types"`
    Name  string `json:"name"`
    Sex   string `json:"-"`
    Age   int    `json:"age,omitempty"`
}

func main() {
    str := "{\"id\":1,\"types\":\"CAT\",\"name\":\"CATIA\"}"

    ani := Animal{}

    json.Unmarshal([]byte(str) ,&ani)

    fmt.Println(ani)
}


이런 식이다.



단 주의 할점은
구조체 선언할때 변수명을 반드시 대문자로 해야한다.
Golang의 규칙인데 소문자는 private , 대문자는 public 이기 때문이다.
json sdk 에서 소문자면 에러를 뿜어낸다.

태그로 정의한대로 해당 이름이 있으면 변수에 잘 넣어준다.




..
개발 포스팅을 하니깐 뭔가 어색하고 재미와 감동이 없고
쓸때없는짓 하는것 같다.
하지만 참고 . . . 이런식으로 좀 늘려보자.







댓글 없음:

댓글 쓰기