English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang 기본 튜토리얼

Golang 제어 문

Golang 함수 & 메서드

Golang 구조체

Golang 슬라이스 & 배열

Golang 문자열(String)

Golang 포인터

Golang 인터페이스

Golang 병행

Golang 예외(Error)

Golang 다른杂项

Go 언어 JSON

Go는 JSON编码과 디코딩에 대한 내장 지원을 가지고 있습니다. 또한 사용자 정의 데이터 타입을 지원합니다.

Marshal 함수는 go 데이터 타입을 JSON 형식으로 변환하는 데 사용됩니다.

Marshal 함수의 문법은 다음과 같습니다:

"func Marshal(v interface{}) ([]byte, error)"

Marshal 함수는 v의 JSON编码을 반환합니다.

부울 값은 JSON 부울 값으로 변환됩니다. 부동소수점, 정수와 숫자는 JSON 숫자로 변환됩니다. Map의 키 타입은 문자열, 정수 타입이거나 encoding.TextMarshaler를 구현해야 합니다.

JSON의 디코딩은 Unmarshal 함수를 사용하여 완료됩니다.

Unmarshal 함수의 문법은 다음과 같습니다:

"func Unmarshal(data []byte, v interface{}) error"

Unmarshal JSON编码의 값을 디코딩하고, 결과를 v 가 가리키는 값을 저장합니다. v 가 nil 이거나 포인터가 아니면, Unmarshal 함수는 InvalidUnmarshalError 를 반환합니다.

우리는 또한 struct 필드 태그에 "json" 키하에 저장된 필드를 정의할 수 있습니다. 필드 이름을 사용하고, 옵션 목록을 구분자로 구분한 값을 사용할 수 있습니다.

Field int 'json:"myName"' // JSON에서 "myName" 키로 표시됩니다.
Field int 'json:"myName,omitempty?'//이 필드의 값이 비어 있으면, 이 필드를 객체에서 제외합니다.
Field int 'json:"-"" ////필드는 이 패키지에서 무시됩니다。

Go JSON 예제1

package main
import "encoding"/json"
import "fmt"
func main() {
	bolType, _ := json.Marshal(false) //부울 값
	fmt.Println(string(bolType))
	intType, _ := json.Marshal(10) // 정수 값
	fmt.Println(string(intType))
	fltType, _ := json.Marshal(3.14) //부동점수 값
	fmt.Println(string(fltType))
	strType, _ := json.Marshal("w"3codebox") // 문자열 값
	fmt.Println(string(strType))
	slcA := []string{"sun", "moon", "star"} //스ライ스 값
	slcB, _ := json.Marshal(slcA)
	fmt.Println(string(slcB))
	mapA := map[string]int{"sun": 1, "moon": 2} //map 값
	mapB, _ := json.Marshal(mapA)
	fmt.Println(string(mapB))
}

출력:

false
10
3.14
"w"3codebox"
["sun","moon","star"]
{"moon":2,"sun":1}

Go JSON 예제2(사용자 정의 데이터 타입)

package main
import (
	"encoding"/json"
	"fmt"
	"os"
)
type Response1 struct {
	Position   int
	Planet []string
}
type Response2 struct {
	Position   int      'json:"position"'
	Planet []string 'json:"planet"'
}
func main()  {
	res1A := &Response1{
		Position:   1,
		Planet: []string{"mercury", "venus", "earth"}}
	res1B, _ := json.Marshal(res1A)
	fmt.Println(string(res1B))
	res2D := &Response2{
		Position:   1,
		Planet: []string{"mercury", "venus", "earth"}}
	res2B, _ := json.Marshal(res2D)
	fmt.Println(string(res2B))
	byt := []byte('{"pi":6.13,"place":["New York","New Delhi"]}`)
	var dat map[string]interface{}
	if err := json.Unmarshal(byt, &dat); err != nil {
		panic(err)
	}
	fmt.Println(dat)
	num := dat["pi"].(float64)
	fmt.Println(num)
	strs := dat["place"].([]interface{})
	str1 := strs[0].(string)
	fmt.Println(str1)
	str := `{"Position": 1, "Planet": ["mercury", "venus"]}`
	res := Response2{}
	json.Unmarshal([]byte(str), &res)
	fmt.Println(res)
	fmt.Println(res.Planet[1])
	enc := json.NewEncoder(os.Stdout)
	d := map[string]string{"1:"mercury" , "2: "venus"}
	enc.Encode(d)
}

출력:

{"Position":1,"Planet":["mercury","venus","earth"]}
{"position":1,"planet":["mercury","venus","earth"]}
map[pi:6.13 place:[New York New Delhi]]
6.13
New York
{1 [mercury venus]}
venus
{"1":mercury","2:"venus"