0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GoでJSONを扱う場合、"encoding/json"パッケージを使います。

よく使うのは、MarshalとUnmarshalの2つですが、今回は以下のメソッドを使用していきます。

メモリに保存せずストリームとして処理する

  • NewEncoder
  • NewDecoder
package main

import (
	"encoding/json"
	"os"
)

type User struct {
	Name  string `json:"name"`
	Age   int    `json:"age"`
	Email string `json:"email"`
}

func main() {
	user := User{
		Name:  "Test",
		Age:   25,
		Email: "test@example.com",
	}

	file, err := os.Create("user.json")
	if err != nil {
		panic(err)
	}
	defer file.Close()

    // ストリームとして逐次処理してファイルに書き込む
	encoder := json.NewEncoder(file)
	err = encoder.Encode(user)
	if err != nil {
		panic(err)
	}
}
package main

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

type User struct {
	Name  string `json:"name"`
	Age   int    `json:"age"`
	Email string `json:"email"`
}

func main() {
	file, err := os.Open("user.json")
	if err != nil {
		panic(err)
	}

	var user User

    // ファイルから読み込んだJSONデータをそのまま構造体に入れる
	decoder := json.NewDecoder(file)
	err = decoder.Decode(&user)
	if err != nil {
		panic(err)
	}

	fmt.Printf("Name: %s\n", user.Name)
	fmt.Printf("Age: %d\n", user.Age)
	fmt.Printf("Email: %s\n", user.Email)
}

このようにNewEncoder、NewDecoderを使用すると、MarshalやUnmarshalを使っていたときのように、構造体をbyteに変換したり、JSON文字列をbyteに変換する必要がなく、メモリに保存しなくていいので、メモリの消費が抑えられます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?