English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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:"-"" ////필드는 이 패키지에서 무시됩니다。
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}
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"