Go 構造体を JSON に変換する方法
Suraj Joshi
2023年1月30日
JSON は、データを保存および転送するための、言語に依存しない軽量な形式です。Go では、encoding/json
パッケージを使用しています。これには、JSON 関連の操作用の組み込みメソッドが多数含まれています。マーシャリングを使用して、構造体データを JSON に変換できます。
Go 構造体を JSON に変換する
marshal
メソッドは struct
オブジェクトを受け取り、エンコードされたデータのバイトスライスを返します。これを Go で JSON に変更できます。
package main
import (
"encoding/json"
"fmt"
)
type Employee struct {
Name string `json:"empname"`
Number int `json:"empid"`
}
func main() {
employee_1 := &Employee{Name: "Dixya Lhyaho", Number: 10}
e, err := json.Marshal(employee_1)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(e))
}
出力:
{"empname":"Dixya Lhyaho","empid":10}
Number
プロパティを number
に変更すると、json/encoding
パッケージはそれを認識できないため、マーシャリングプロセスで number
は無視されます。
package main
import (
"encoding/json"
"fmt"
)
type Employee struct {
Name string `json:"empname"`
number int `json:"empid"`
}
func main() {
employee_1 := &Employee{Name: "Dixya Lhyaho", number: 10}
e, err := json.Marshal(employee_1)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(e))
}
出力:
{"empname":"Dixya Lhyaho"}
Go でのネストされた構造体の JSON への変換
ネストされた構造体でより複雑な構造体を定義しましょう。構造体の定義内で、構造体のフィールドをマーシャリングされた JSON のフィールドに直接マップする JSON タグを定義します。
package main
import (
"encoding/json"
"fmt"
)
type Employee struct {
Position string `json:"position"`
Name Name `json:"name"`
}
type Name struct {
FirstName string `json:"firstname"`
Surname string `json:"surname"`
}
func main() {
name := Name{FirstName: "Dikxya", Surname: "Lhyaho"}
employee := Employee{Position: "Senior Developer", Name: name}
byteArray, err := json.Marshal(employee)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(byteArray))
}
出力:
{"position":"Senior Developer","name":{"firstname":"Dikxya","surname":"Lhyaho"}}
Go の構造体から JSON への変換でのインデント
json.Marshal()
関数の代わりに json.MarshalIndent()
関数を使用して、JSON をより読みやすい形式で出力できます。2つの追加の引数、prefix string
と indent string
を MarshalIndent
に渡します。
package main
import (
"encoding/json"
"fmt"
)
type Employee struct {
Position string `json:"position"`
Name Name `json:"name"`
}
type Name struct {
FirstName string `json:"firstname"`
Surname string `json:"surname"`
}
func main() {
name := Name{FirstName: "Dikxya", Surname: "Lhyaho"}
employee := Employee{Position: "Senior Developer", Name: name}
byteArray, err := json.MarshalIndent(employee, "", " ")
if err != nil {
fmt.Println(err)
}
fmt.Println(string(byteArray))
}
出力:
{
"position": "Senior Developer",
"name": {
"firstname": "Dikxya",
"surname": "Lhyaho"
}
}
著者: Suraj Joshi
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn