- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
JSON 문서 사용하기
이재홍 http://www.pyrasis.com 2014.12.17 ~ 2015.02.07
프로그래밍 환경이 급격히 인터넷 기반으로 발전하면서 JSON(JavaScript Object Notation) 형식이 널리 쓰이고 있습니다. 이번에는 Go 언어에서 JSON을 사용하는 방법에 대해 알아보겠습니다.
다음은 encoding/json 패키지에서 제공하는 JSON 함수입니다.
- func Marshal(v interface{}) ([]byte, error): Go 언어 자료형을 JSON 텍스트로 변환
- func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error): Go 언어 자료형을 JSON 텍스트로 변환하고 사람이 보기 편하도록 들여쓰기를 해줌
- func Unmarshal(data []byte, v interface{}) error: JSON 텍스트를 Go 언어 자료형으로 변환
먼저 JSON 문서를 읽는 방법입니다.
package main
import (
"encoding/json"
"fmt"
)
func main() {
doc := `
{
"name": "maria",
"age": 10
}
`
var data map[string]interface{} // JSON 문서의 데이터를 저장할 공간을 맵으로 선언
json.Unmarshal([]byte(doc), &data) // doc를 바이트 슬라이스로 변환하여 넣고,
// data의 포인터를 넣어줌
fmt.Println(data["name"], data["age"]) // maria 10: 맵에 키를 지정하여 값을 가져옴
}
JSON 문서를 Go 언어에서 읽으려면 encoding/json 패키지의 Unmarshal 함수를 사용합니다. 여기서 JSON 문서의 데이터를 저장할 공간이 필요한데 간단하게 맵으로 만들 수 있습니다.
var data map[string]interface{} // JSON 문서의 데이터를 저장할 공간을 맵으로 선언
JSON 문서에서 키는 문자열이며 값은 문자열과 숫자를 사용하고 있습니다. 따라서 맵을 만들 때 키는 문자열로 지정하고 값은 interface{}로 지정하여 모든 값을 넣을 수 있도록 합니다.
이제 json.Unmarshal 함수에 JSON 문자열을 []byte 형식으로 변환하여 넣고, 맵의 포인터도 넣습니다.
json.Unmarshal([]byte(doc), &data) // doc를 바이트 슬라이스로 변환하여 넣고, data의 포인터를 넣어줌
이제 맵에서 data["name"]처럼 키를 지정하면 값을 가져올 수 있습니다.
fmt.Println(data["name"], data["age"]) // maria 10: 맵에 키를 지정하여 값을 가져옴
이번에는 맵 형태의 데이터를 JSON 형태로 변환해보겠습니다.
package main
import (
"encoding/json"
"fmt"
)
func main() {
data := make(map[string]interface{}) // 문자열을 키로하고 모든 자료형을 저장할 수 있는 맵 생성
data["name"] = "maria"
data["age"] = 10
doc, _ := json.Marshal(data) // 맵을 JSON 문서로 변환
fmt.Println(string(doc)) // {"age":10,"name":"maria"}: 문자열로 변환하여 출력
}
문자열을 키로하고 모든 자료형을 값으로 저장할 수 있는 맵을 할당합니다. 그리고 적절히 데이터를 대입한 뒤 json.Marshal 함수를 사용하여 JSON 문서로 변환합니다.
json.Marshal 함수에서 리턴된 값은 []byte 형식이므로 출력할 때는 string 형식으로 변환해줍니다.
JSON 문서로 변환했을 때 한 줄로 붙어서 나오면 사람이 읽기 힘듭니다. 따라서 다음과 같이 json.MarshalIndent 함수를 사용하면 사람이 쉽게 읽을 수 있도록 변환할 수 있습니다.
doc, _ := json.MarshalIndent(data, "", " ")
첫 번째 매개변수는 JSON 문서로 만들 데이터입니다. 그리고 두 번째 매개변수는 JSON 문서의 첫 칸에 표시할 문자열(Prefix)인데 보통 ""
(빈 문자)를 지정합니다. 마지막으로 세 번째 매개변수는 들여쓰기할 문자입니다. 공백 문자나 탭 문자를 사용할 수 있습니다.
Prefix는 표시하지 않고, 들여쓰기는 2칸으로 지정하면 다음과 같이 JSON 문서로 변환됩니다.
{
"age": 10,
"name": "maria"
}
저작권 안내
이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.- 블로그, 게시판 등에 퍼가는 것을 금지합니다.
- 비공개 포스트에 퍼가는 것을 금지합니다.
- 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
- 링크 및 SNS 공유는 허용합니다.