はじめに
Go言語には標準パッケージである encoding/json
があります。このパッケージを使うことで、Go言語でJSONデータを簡単に取り扱うことができます。本記事では、具体的にオブジェクトと配列を含むJSONファイルからの値の取得方法を詳しく解説します。
流行りに乗ってGo言語を使ってみた(インストールからHelloWorld表示まで)
JSONとは
JSON(JavaScript Object Notation)は、データの構造化した形式の一つで、データ交換のフォーマットとして広く利用されています。JSONは人間にとって読み書きが容易で、マシンにとっても簡単にパースや生成を行うことができます。
GoでJSONを読み込む
まずは、シンプルなJSONファイルを読み込む例から始めましょう。以下のような user.json
ファイルを考えます。
{
"name": "Alice",
"age": 25
}
このJSONファイルをGoで読み込むためには、まずこのJSONデータが表現する構造をGoの構造体(struct)で定義します。
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
そして、os.Open
関数でファイルを開き、json.NewDecoder
でJSONデコーダを作成します。そして、Decode
メソッドを使用してJSONデータをGoの構造体に変換します。
package main
import (
"encoding/json"
"fmt"
"os"
)
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
file, err := os.Open("user.json")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
decoder := json.NewDecoder(file)
var user User
err = decoder.Decode(&user)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(user.Name, user.Age) // Alice 25
}
このようにして、JSONファイルからGoの構造体へとデータを読み込むことができます。
オブジェクトと配列を含むJSONを扱う
次に、オブジェクトと配列を含むような複雑なJSONデータを読み込む方法を見ていきます。以下のような users.json
ファイルを考えます。
{
"users": [
{
"name": "Alice",
"age": 25
},
{
"name": "Bob",
"age": 30
}
]
}
このようなJSONデータをGoで読み込むためには、ネストされたオブジェクトと配列を表現できるような構造体を定義します。
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
type Users struct {
Users []User `json:"users"`
}
ここで、Users
構造体の中にUser
のスライスを持つことで、JSONの配列を表現しています。その後のデコード処理は先程と同じです。
package main
import (
"encoding/json"
"fmt"
"os"
)
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
type Users struct {
Users []User `json:"users"`
}
func main() {
file, err := os.Open("users.json")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
decoder := json.NewDecoder(file)
var users Users
err = decoder.Decode(&users)
if err != nil {
fmt.Println(err)
return
}
for _, user := range users.Users {
fmt.Println(user.Name, user.Age)
}
// Output:
// Alice 25
// Bob 30
}
以上のように、Goの標準パッケージ encoding/json
を使えば、オブジェクトと配列を含む複雑なJSONデータも簡単に取り扱うことができます。JSONのデータ構造に合わせてGoの構造体を定義し、json.NewDecoder
とDecode
メソッドを使えば、JSONファイルの読み込みとGoのデータ構造への変換が行えます。
まとめ
今回は、Go言語でJSONデータを扱う基本的な方法について説明しました。特に、オブジェクトと配列を含むような複雑なJSONデータの取り扱いを紹介しました。Go言語でのJSONデータの取り扱いについては、これらの基本的な方法を理解しておくことが大切です。