package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Gender string `json:"gender"`
}
func main() {
people := []Person{
{"田中太郎", 30, "男性"},
{"山田花子", 25, "女性"},
{"鈴木次郎", 28, "男性"},
}
filename := "people.json"
err := writeJSON(filename, people)
if err != nil {
fmt.Println("エラー:", err)
return
}
fmt.Println("データをファイルに書き込みました:", filename)
loadedPeople, err := readJSON(filename)
if err != nil {
fmt.Println("エラー:", err)
return
}
fmt.Println("ファイルからデータを読み込みました:")
for _, person := range loadedPeople {
fmt.Printf("名前: %s, 年齢: %d, 性別: %s\n", person.Name, person.Age, person.Gender)
}
}
func writeJSON(filename string, data interface{}) error {
jsonData, err := json.MarshalIndent(data, "", " ")
if err != nil {
return err
}
err = ioutil.WriteFile(filename, jsonData, 0644)
if err != nil {
return err
}
return nil
}
func readJSON(filename string) ([]Person, error) {
if _, err := os.Stat(filename); os.IsNotExist(err) {
return nil, fmt.Errorf("ファイルが存在しません: %s", filename)
}
jsonData, err := ioutil.ReadFile(filename)
if err != nil {
return nil, err
}
var people []Person
err = json.Unmarshal(jsonData, &people)
if err != nil {
return nil, err
}
return people, nil
}