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の数字に変換されます。マップのキーの型は文字列、整数型、または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"' 惑星 []string 'json:"planet"' } func main() { res1A := &Response1{ 位置: 1, 惑星: []string{"水星", "金星", "地球"}} res1B, _ := json.Marshal(res1A) fmt.Println(string(res1B)) res2D := &Response2{ 位置: 1, 惑星: []string{"水星", "金星", "地球"}} res2B, _ := json.Marshal(res2D) fmt.Println(string(res2B)) byt := []byte('{"pi":6。13,"場所":["ニューヨーク","ニューデリー"]}`) 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, "惑星": ["水星", "金星"]}` 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:"水星" , "2: "金星"} enc.Encode(d) }
出力:
{"Position":1,"惑星":["水星","金星","地球"]} {"position":1,"惑星":["水星","金星","地球"]} マップ[pi:6。13 場所:[ニューヨーク ニューデリー] 6。13 ニューヨーク {1 [水星 金星] 金星 {"1"水星","2:"venus"