Golang構造体を使ったJSONの操作

今回はGolangを使って構造体とJSONを操作する方法についてお伝えします。Golangは非常にパワフルで効率的なプログラミング言語であり、JSONデータの操作も簡単に行えます。この記事では、具体的なコード例を紹介しながら、構造体とJSONの相互変換について学びましょう。

構造体とJSONの基本

まず、構造体とJSONの基本的な使い方から始めましょう。以下は、サンプルの構造体とJSONデータです。

package main

import (
    "encoding/json"
    "fmt"
)

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

func main() {
    // 構造体からJSONへのエンコード
    person := Person{Name: "John", Age: 30}
    jsonData, err := json.Marshal(person)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(jsonData))

    // JSONから構造体へのデコード
    jsonStr := `{"name":"Alice","age":25}`
    var newPerson Person
    err = json.Unmarshal([]byte(jsonStr), &newPerson)
    if err != nil {
        panic(err)
    }
    fmt.Println(newPerson)
}

このコード例では、Personという構造体を定義し、jsonパッケージを使用して構造体とJSONデータを相互に変換しています。jsonタグを使用してフィールド名とJSONキーの対応を設定し、omitemptyを使って空のフィールドを無視することもできます。

JSONの操作パターン

さて、さまざまなJSON操作パターンを見てみましょう。以下は、いくつかの例です。

1. JSONから特定の値を取得する

func getValueFromJSON(jsonData []byte, key string) interface{} {
    var data map[string]interface{}
    if err := json.Unmarshal(jsonData, &data); err != nil {
        panic(err)
    }
    return data[key]
}

func main() {
    jsonData := []byte(`{"name":"Bob","age":40,"email":"bob@example.com"}`)
    name := getValueFromJSON(jsonData, "name").(string)
    age := int(getValueFromJSON(jsonData, "age").(float64))
    fmt.Printf("Name: %s, Age: %d\n", name, age)
}

2. JSONに新しいデータを追加する

func addDataToJSON(jsonData []byte, key string, value interface{}) []byte {
    var data map[string]interface{}
    if err := json.Unmarshal(jsonData, &data); err != nil {
        panic(err)
    }
    data[key] = value
    newJSONData, err := json.Marshal(data)
    if err != nil {
        panic(err)
    }
    return newJSONData
}

func main() {
    jsonData := []byte(`{"name":"Charlie","age":35}`)
    newData := addDataToJSON(jsonData, "email", "charlie@example.com")
    fmt.Println(string(newData))
}

3. JSONデータの一部を削除する

func removeDataFromJSON(jsonData []byte, key string) []byte {
    var data map[string]interface{}
    if err := json.Unmarshal(jsonData, &data); err != nil {
        panic(err)
    }
    delete(data, key)
    newJSONData, err := json.Marshal(data)
    if err != nil {
        panic(err)
    }
    return newJSONData
}

func main() {
    jsonData := []byte(`{"name":"David","age":45,"email":"david@example.com"}`)
    newData := removeDataFromJSON(jsonData, "email")
    fmt.Println(string(newData))
}

以上、Golangを使った構造体とJSONの操作方法について紹介しました。これらのコード例を活用して、JSONデータの操作を効率的に行うことができるでしょう。どの操作も簡潔で効果的な方法です。もし質問や疑問があれば、お気軽にコメントしてください。

タイトルとURLをコピーしました