HOWTO · Go

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

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

このページの内容

このチュートリアルでは、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.