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の数字に変換されます。マップのキーの型は文字列、整数型、または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"'
	惑星 []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"