如何在 Golang 中解析 JSON 檔案?
假設我們想要在 **Go** 中讀取一個 JSON 檔案。讀取的意思是,我們將檔案資料轉換為 **Go** 中的 **結構體**。
請考慮下面所示的 JSON 檔案,我們將使用它來讀取資料,然後將其轉換為結構體。
{
"users": [
{
"name": "Mukul Latiyan",
"social": {
"facebook": "https://facebook.com/immukul",
"twitter": "https://twitter.com/immukul",
"linkedin": "https://linkedin.com/immukul"
}
},
{
"name": "Mayank",
"social": {
"facebook": "https://facebook.com/mayank101",
"twitter": "https://twitter.com/mayank101",
"linkedin": "https://linkedin.com/mayank101"
}
},
{
"name": "Deepak",
"social": {
"facebook": "https://facebook.com/deepak1",
"twitter": "https://twitter.com/deepak1",
"linkedin": "https://linkedin.com/deepak1"
}
}
]
}上述 JSON 檔案應以 **users.json** 的名稱儲存。它包含不同的使用者,每個使用者都有一個姓名和不同的社交欄位。
在 Golang 中讀取上述 JSON 的一種非常簡單的方法是使用 **非結構化方法**。在非結構化方法中,我們使用 **interfaces{}** 讀取 JSON 資料。
請考慮下面所示的程式碼,它將允許我們讀取 **users.json** 檔案。
示例 1
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"os"
)
func main() {
fileContent, err := os.Open("users.json")
if err != nil {
log.Fatal(err)
return
}
fmt.Println("The File is opened successfully...")
defer fileContent.Close()
byteResult, _ := ioutil.ReadAll(fileContent)
var res map[string]interface{}
json.Unmarshal([]byte(byteResult), &res)
fmt.Println(res["users"])
}輸出
如果我們對上述程式碼執行命令 **go run main.go**,那麼我們將在終端中獲得以下輸出。
The File is opened successfully... [map[name:Mukul Latiyan social:map[facebook:https://facebook.com/immukul linkedin:https://linkedin.com/immukul twitter:https://twitter.com/immukul]] map[name:Mayank social:map[facebook:https://facebook.com/mayank101 linkedin:https://linkedin.com/mayank101 twitter:https://twitter.com/mayank101]] map[name:Deepak social:map[facebook:https://facebook.com/deepak1 linkedin:https://linkedin.com/deepak1 twitter:https://twitter.com/deepak1]]]
下一步是建立將儲存 JSON 資料的 **結構體**。請考慮下面提到的 **結構體**。
type Users struct {
Users []User `json:"users"`
}
type User struct {
Name string `json:"name"`
Social Social `json:"social"`
}
type Social struct {
Facebook string `json:"facebook"`
Twitter string `json:"twitter"`
LinkedIn string `json:"linkedin"`
}最後一步是使用 **json.Unmarshal()** 函式。
示例 2
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"os"
)
type Users struct {
Users []User `json:"users"`
}
type User struct {
Name string `json:"name"`
Social Social `json:"social"`
}
type Social struct {
Facebook string `json:"facebook"`
Twitter string `json:"twitter"`
LinkedIn string `json:"linkedin"`
}
func main() {
fileContent, err := os.Open("users.json")
if err != nil {
log.Fatal(err)
return
}
fmt.Println("The File is opened successfully...")
defer fileContent.Close()
byteResult, _ := ioutil.ReadAll(fileContent)
var users Users
json.Unmarshal(byteResult, &users)
for i := 0; i < len(users.Users); i++ {
fmt.Println("User Name: " + users.Users[i].Name)
fmt.Println("Facebook Url: " + users.Users[i].Social.LinkedIn)
}
}輸出
如果我們對上述程式碼執行命令 go **run main.go**,那麼我們將在終端中獲得以下輸出。
The File is opened successfully... User Name: Mukul Latiyan Facebook Url: https://linkedin.com/immukul User Name: Mayank Facebook Url: https://linkedin.com/mayank101 User Name: Deepak Facebook Url: https://linkedin.com/deepak1
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP