NU:LOGiC Logo

【Go言語】JSON操作の完全ガイド: GoでJSONをエンコード・デコードする方法

【Go言語】JSON操作の完全ガイド: GoでJSONをエンコード・デコードする方法

はじめに

JSONは、WebのAPIや設定ファイルをはじめにさまざまな場面で利用されています、この記事では、Go言語を用いてJSONをエンコード・デコードする基本的な方法から、実際のファイル操作までをわかりやすくガイドします。

3行で要約すると

  • Go言語のosパッケージを使用して、JSONファイルの読み書きを実現する方法。
  • encoding/jsonパッケージを使ったJSONのエンコードとデコード方法。
  • 実践的なコード例でJSONの操作をマスターしましょう。

Go言語でのJSON操作

Go言語はAPIやデータの交換の際に頻繁にJSON形式を扱うことがあります。この記事では、Go言語を使ってJSONを効果的に操作する方法を紹介します。

JSONエンコード

GoのstructをJSON文字列にエンコードする方法を見てみましょう。

package main

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

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

func main() {
    // Person型のインスタンスを作成
    p := Person{Name: "Taro", Age: 25, Email: "[email protected]"}

    // JSONエンコード
    jsonData, err := json.Marshal(p)
    if err != nil {
        fmt.Println(err)
        return
    }

    // エンコード結果の表示
    fmt.Println(string(jsonData))
}

このコードは、PersonというstructをJSON文字列にエンコードして表示します。実行結果は以下のようになります。

{"name":"Taro","age":25,"email":"[email protected]"}

JSONデコード

次に、JSON文字列をGoのstructにデコードする方法を紹介します。

package main

import (
    "encoding/json"
    "fmt"
)

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

func main() {
    // デコードするJSONデータ
    jsonStr := `{"name":"Taro","age":25,"email":"[email protected]"}`

    var p Person

    // JSONデコード
    if err := json.Unmarshal([]byte(jsonStr), &p); err != nil {
        fmt.Println(err)
        return
    }

    // デコード結果の表示
    fmt.Println(p)
}

実行すると、以下のような結果が表示されます。

{Name:Taro Age:25 Email:taro@example.com}

JSONファイルの読み書き

osパッケージを使用して、JSONファイルの読み書きを行います。

ファイルの書き込み

package main

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

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

func main() {
    p := Person{Name: "Taro", Age: 25, Email: "[email protected]"}

    // ファイルを作成
    file, err := os.Create("person.json")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer file.Close()

    // JSONエンコードしてファイルに書き込み
    encoder := json.NewEncoder(file)
    if err := encoder.Encode(p); err != nil {
        fmt.Println(err)
    }
}

このコードは、Person structをperson.jsonというファイルに書き込む例です。

ファイルの読み込み

package main

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

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

func main() {
    // ファイルを開く
    file, err := os.Open("person.json")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer file.Close()

    var p Person

    // ファイルからJSONデータをデコード
    decoder := json.NewDecoder(file)
    if err := decoder.Decode(&p); err != nil {
        fmt.Println(err)
        return
    }

    // 読み込んだデータの表示
    fmt.Println(p)
}

このコードは、先ほど書き込んだperson.jsonを読み込み、デコードして表示する例です。

まとめ

Go言語を使ったJSONの操作は非常にシンプルで効果的です。日常的な開発業務で頻繁に使用する知識なので、しっかりとマスターしておきましょう。