Skip to content

Instantly share code, notes, and snippets.

@yhirano55
Created March 6, 2017 21:35
Show Gist options
  • Save yhirano55/6d601fef48d7c1c926300da31452c5b2 to your computer and use it in GitHub Desktop.
Save yhirano55/6d601fef48d7c1c926300da31452c5b2 to your computer and use it in GitHub Desktop.

golangでJSONを扱う

encofing/jsonパッケージを利用する

JSONのUnmarshalize

package main

import (
	"encoding/json"
	"fmt"
)

type Student struct {
  Id   int
  Name string
}

func main() {
	var jsonBlob = []byte(`[
		{Id: 1, "Name": "alice"},
		{Id: 2, "Name": "bob"}
	]`)
  // JSONの返り値を受け取る変数を定義
	var students []Student
  // Unmarshalizeしてstudentsにセット
	err := json.Unmarshal(jsonBlob, &students)
	if err != nil {
		fmt.Println("error:", err)
	}
	fmt.Printf("%+v", students[0])
	fmt.Println(students[0].Name)
}

JSONのMarshalize

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
)

type Country struct {
	Name        string       `json:"name"`
	Prefectures []Prefecture `json:"prefectures"`
}

type Prefecture struct {
	Name       string `json:"name"`
	Capital    string `json:"capital"`
	Population int    `json:"population"`
}

func main() {
	tokyo := Prefecture{Name: "東京都", Capital: "東京", Population: 1234}
	osaka := Prefecture{Name: "大阪府", Capital: "大阪市", Population: 2345}
	kyoto := Prefecture{Name: "京都府", Capital: "京都市", Population: 3456}
	japan := Country{Name: "日本", Prefectures: []Prefecture{tokyo, osaka, kyoto}}
	// ここでマーシャライズ
	jsonBytes, err := json.Marshal(japan)
	if err != nil {
		fmt.Println("JSON Marshal error:", err)
		return
	}
	// ByteBufferを作成し、書き込む
	out := new(bytes.Buffer)
	json.Indent(out, jsonBytes, "", "    ")
	fmt.Println(out.String())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment