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 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