Go で JSON を構造体に変換する

Sheeraz Gul 2023年6月20日
  1. Unmarshal メソッドを使用して、Go で JSON を構造体に変換する
  2. Go で JSON の配列を構造体に変換する
  3. Go でネストされた JSON を構造体に変換する
Go で JSON を構造体に変換する

このチュートリアルでは、JSON を GoLang の構造体に変換する方法を示します。

Unmarshal メソッドを使用して、Go で JSON を構造体に変換する

GoLang の encoding/json パッケージは、JSON データをバイト形式に変換する関数 Unmarshal を提供します。 この関数は、構造化および非構造化 JSON データを []byte 形式に解析できます。

このバイト変換を使用して、JSON を構造体に変換できます。 Unmarshal メソッドを使用して JSON を構造体に変換する例を試してみましょう。

package main

import (
    "encoding/json"
    "fmt"
)

type Employee struct {
    Name     string
    ID       int
    Salary   int
    Position string
}

func main() {
    EmployeeJSON := `{"Name": "Sheeraz", "ID": 10, "Salary": 3000, "Position": "Senior Developer" }`

    var employees Employee

    json.Unmarshal([]byte(EmployeeJSON), &employees)

    fmt.Printf("Name: %s, ID: %d , Salary: %d , Position: %s", employees.Name, employees.ID, employees.Salary, employees.Position)

    fmt.Println("\n", employees)
}

上記のコードは、GoLang の JSON 標準ライブラリの Unmarshal メソッドを使用して、指定された JSON を構造体に変換します。 出力を参照してください。

Name: Sheeraz, ID: 10 , Salary: 3000 , Position: Senior Developer

{Sheeraz 10 3000 Senior Developer}

Program exited.

Go で JSON の配列を構造体に変換する

ご覧のとおり、上記の例は単一の JSON を構造体に変換しますが、JSON の配列がある場合はどうなるでしょうか? JSON の配列を構造体に変換する例を試してみましょう。

package main

import (
    "encoding/json"
    "fmt"
)

type Employee struct {
    Name     string
    ID       int
    Salary   int
    Position string
}

func main() {
    EmployeeJSON := `[{"Name": "Sheeraz", "ID": 10, "Salary": 3000, "Position": "Senior Developer" },
    {"Name": "Jack", "ID": 20, "Salary": 2000, "Position": "Junior Developer" },
    {"Name": "John", "ID": 30, "Salary": 1500, "Position": "Junior Developer" },
    {"Name": "Mike", "ID": 40, "Salary": 1000, "Position": "Intern" }
    ]`

    var employees []Employee

    json.Unmarshal([]byte(EmployeeJSON), &employees)

    fmt.Printf("Employees Structs : %+v", employees)
}

上記のコードは、JSON の配列を構造体の配列に変換します。 出力を参照してください。

Employees Structs : [
{Name:Sheeraz ID:10 Salary:3000 Position:Senior Developer}
{Name:Jack ID:20 Salary:2000 Position:Junior Developer}
{Name:John ID:30 Salary:1500 Position:Junior Developer}
{Name:Mike ID:40 Salary:1000 Position:Intern}]
Program exited.

Go でネストされた JSON を構造体に変換する

JSON は、JSON のフィールドに別のフィールドが含まれるネストされた形式でも作成されます。 このタイプの JSONS を変換するには、ネストされた構造体を作成する必要があります。

例を見てみましょう:

package main

import (
    "encoding/json"
    "fmt"
)

type EmployeeType struct {
    Gender   string
    Contract string
}

type Employee struct {
    Name         string
    ID           int
    Salary       int
    Position     string
    EmployeeType EmployeeType
}

func main() {
    EmployeeJSON := `{"Name": "Sheeraz", "ID": 10, "Salary": 3000, "Position": "Senior Developer", "EmployeeType": {"Gender": "Male" ,"Contract": "Fulltime"}  }`

    var employees Employee

    json.Unmarshal([]byte(EmployeeJSON), &employees)

    fmt.Printf("Name: %s, ID: %d , Salary: %d , Position: %s, Gender: %s, Contract: %s",
        employees.Name, employees.ID, employees.Salary, employees.Position, employees.EmployeeType.Gender, employees.EmployeeType.Contract)

    fmt.Println("\n", employees)
}

上記のコードは、ネストされた JSON オブジェクトをネストされた構造体に変換します。 出力を参照してください。

Name: Sheeraz, ID: 10 , Salary: 3000 , Position: Senior Developer, Gender: Male, Contract: Fulltime
{Sheeraz 10 3000 Senior Developer {Male Fulltime}}

Program exited.
著者: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

関連記事 - Go JSON