首頁  >  文章  >  後端開發  >  golang 怎麼讀取json

golang 怎麼讀取json

WBOY
WBOY原創
2023-05-14 20:56:061635瀏覽

Go語言是一門強類型的程式語言,常用於網路程式設計和大數據處理。 JSON作為一種輕量級的資料交換格式,被廣泛應用於網路傳輸中的資料傳輸與接收。在Go語言中,讀取JSON資料是一項非常常見的任務。那麼,在本文中,我們將介紹如何使用Golang來讀取JSON資料。

一、Golang中使用JSON結構體

在Golang中,可以使用結構體來定義JSON格式,然後可以使用json.Unmarshal()函數來解析JSON數據,實作JSON數組的讀取。以下程式碼示範如何從JSON資料中讀取一個陣列。

package main
import (
    "encoding/json"
    "fmt"
)
type Book struct {
    Title  string `json:"title"`
    Author string `json:"author"`
    Price  string `json:"price"`
}
func main() {
    jsonData := `[{"title":"Golang实战开发","author":"张三","price":"100元"},
                  {"title":"深入浅出Go","author":"李四","price":"80元"}]`
    var books []Book
    json.Unmarshal([]byte(jsonData), &books)
    for _, book := range books {
        fmt.Println("Book Title: ", book.Title)
        fmt.Println("Book Author: ", book.Author)
        fmt.Println("Book Price: ", book.Price)
    }
}

在上述程式碼中,我們首先定義了一個Book結構體,用來表示每本書的屬性資訊。該結構體使用了json tag來綁定JSON字段,確保我們可以正確地讀取JSON資料。

接下來,我們示範如何將JSON字串解析為Book類型的slice。在程式碼中,我們首先建立一個空的slice來保存解析後的資料。然後,我們呼叫json.Unmarshal()函數,並向其傳遞JSON資料和指向我們建立的空slice的指標。此時,函數將會自動解析JSON字串,並將資料解析為Book類型的slice。

最後,我們遍歷剛剛解析出來的slice,並將每本書的屬性資訊列印到終端機中。當我們執行程式時,可以看到以下輸出結果:

Book Title:  Golang实战开发
Book Author:  张三
Book Price:  100元
Book Title:  深入浅出Go
Book Author:  李四
Book Price:  80元

二、使用Interface{}讀取JSON資料

在某些場景下,我們並不知道JSON資料的具體結構,此時,我們可以使用interface{}類型的變數來處理JSON資料。下面的程式碼示範如何使用interface{}類型來讀取未知結構的JSON物件。

package main
import (
    "encoding/json"
    "fmt"
)
func main() {
    jsonData := `{"name":"张三","age":20}`
    var unknown map[string]interface{}
    json.Unmarshal([]byte(jsonData), &unknown)
    for key, value := range unknown {
        fmt.Printf("%v : %v
", key, value)
    }
}

在上面的例子中,我們使用了一個interface{}類型的map來接收未知結構的JSON數據,這樣就不需要事先定義結構體了。 json.Unmarshal()函數將JSON字串解析為一個map[string]interface{}類型的變量,並使用for迴圈遍歷該變量,並分別輸出其鍵和值。當我們執行程式時,可以看到以下輸出結果:

name : 张三
age : 20

三、使用非結構體類型讀取JSON資料

另外,當我們處理小巧的JSON物件或只需要讀取其中一部分資料時,可能不需要先定義一個結構體,而只需要定義一個值變量,然後直接將JSON字串解析到該變數中。下面的程式碼示範如何使用非結構體類型來讀取JSON物件。

package main
import (
    "encoding/json"
    "fmt"
)
func main() {
    jsonData := `{"name":"张三","age":20}`
    var unknown interface{}
    json.Unmarshal([]byte(jsonData), &unknown)
    m := unknown.(map[string]interface{})
    fmt.Println(m["name"], m["age"])
}

在上述程式碼中,我們使用了一個interface{}類型的變數來接收JSON數據,並使用類型斷言將其轉換為map[string]interface{}類型。然後我們取出了map中的"name"和"age"欄位並列印輸出。

當我們執行程式時,可以看到以下輸出結果:

张三 20

總結

#在Golang中讀取JSON資料是一件非常方便的事情。使用結構體來定義JSON格式可以讓程式更加清晰明了,使用interface{}類型的變數可以接收未知結構的JSON數據,而使用非結構體類型則可以簡化程式碼並提高程式的執行效率。當然,以上三種讀取JSON資料的方法都有它們的優缺點,我們可以根據不同的場景靈活地選擇相應的方法。

以上是golang 怎麼讀取json的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn