在 Golang 中,JSON 是一種重要的資料格式,因為其可以方便的進行資料傳輸和儲存。在處理 JSON 資料時,型別轉換是非常常見的操作,本文將介紹 Golang 中的 JSON 類型轉換。
在進行 JSON 類型轉換之前,我們需要了解 JSON 中的資料類型。 JSON 資料型別與Golang 中的資料型別不完全對應,JSON 中有下列6 種資料型別:
在Golang 中,我們可以使用下列類型來表示JSON 資料型別:
在進行JSON 型別轉換之前,首先需要了解JSON 解析與編碼。
透過encoding/json
套件中的Decode
方法,可以將字串或字節數組解析為JSON 對象。例如:
import ( "encoding/json" "fmt" ) type Person struct { Name string Age int Address string } func main() { jsonStr := `{"Name": "Tom", "Age": 18, "Address": "Beijing"}` var p Person err := json.Unmarshal([]byte(jsonStr), &p) if err != nil { fmt.Println(err) return } fmt.Println(p.Name, p.Age, p.Address) }
上述程式碼中,Unmarshal
方法將JSON 字串解析為Person
對象,當然如果我們只想解析為map[string]interface{}
或[]interface{}
等基礎資料類型也是可以的。
encoding/json 套件中的
Encode 方法,可以將一個JSON 物件編碼為字串或位元組數組。例如:
import ( "encoding/json" "fmt" ) type Person struct { Name string Age int Address string } func main() { p := Person{Name: "Tom", Age: 18, Address: "Beijing"} jsonString, err := json.Marshal(p) if err != nil { fmt.Println(err) return } fmt.Println(string(jsonString)) }在上述程式碼中,
Marshal 方法將
Person 物件編碼為JSON 字串。當然,如果我們只想編碼
map[string]interface{} 或
[]interface{ } 等基礎資料類型也是可以的。
int、
string、
bool 等,也可以將JSON 數組轉換為Golang 中的數組,或是將JSON 物件轉換為Golang 中的結構體。
float64() 和
int()。例如:
import ( "encoding/json" "fmt" ) func main() { jsonStr := `{"float": 1.23, "int": 456}` var data map[string]interface{} err := json.Unmarshal([]byte(jsonStr), &data) if err != nil { fmt.Println(err) return } floatValue := data["float"].(float64) intValue := int(data["int"].(float64)) fmt.Println(floatValue, intValue) }上述程式碼中,我們先將JSON 字串解析為
map[string]interface{} 類型的
data 對象,然後透過斷言將
data 物件中的
float 轉換為
float64 類型的
floatValue 和
int 轉換為
int 類型的
intValue。
string 類型很簡單,直接透過斷言即可。例如:
import ( "encoding/json" "fmt" ) func main() { jsonStr := `{"name": "Tom"}` var data map[string]interface{} err := json.Unmarshal([]byte(jsonStr), &data) if err != nil { fmt.Println(err) return } name := data["name"].(string) fmt.Println(name) }上述程式碼中,我們將JSON 字串解析為
map[string]interface{} 類型的
data 對象,然後透過斷言將
data 物件中的
name 轉換為
string 類型的
name。
[]interface{} 類型很簡單,直接透過斷言即可。例如:
import ( "encoding/json" "fmt" ) func main() { jsonStr := `["Tom", 18, 1.23]` var data []interface{} err := json.Unmarshal([]byte(jsonStr), &data) if err != nil { fmt.Println(err) return } fmt.Println(data) }上述程式碼中,我們將JSON 字串解析為
[]interface{} 類型的
data 數組,透過輸出可以看到
data 陣列的每個元素都被正確解析了。
map[string]interface{} 類型也很簡單,直接透過斷言即可。例如:
import ( "encoding/json" "fmt" ) func main() { jsonStr := `{"name": "Tom", "age": 18}` var data map[string]interface{} err := json.Unmarshal([]byte(jsonStr), &data) if err != nil { fmt.Println(err) return } fmt.Println(data) }上述程式碼中,我們將JSON 字串解析為
map[string]interface{} 類型的
data 對象,透過輸出可以看到
data 物件中包含了兩個鍵值對
name 和
age。
import ( "encoding/json" "fmt" ) type Person struct { Name string Age int Address string } func main() { jsonStr := `{"Name": "Tom", "Age": 18, "Address": "Beijing"}` var data map[string]interface{} err := json.Unmarshal([]byte(jsonStr), &data) if err != nil { fmt.Println(err) return } p := Person{ Name: data["Name"].(string), Age: int(data["Age"].(float64)), Address: data["Address"].(string), } fmt.Println(p) }上述程式碼中,我們將JSON 字串解析為
map[string]interface{} 類型的
data 對象,然後透過斷言將
data 物件中的鍵值對分別賦值給結構體
Person 的欄位。
Golang 中的 JSON 類型轉換非常常見,因此在進行 JSON 資料處理時應該對其進行充分的了解。本文透過介紹 Golang 中 JSON 的資料型態、JSON 解析與編碼方法及 JSON 型別轉換等內容,希望能幫助讀者更好的應用 Golang 處理 JSON 資料。
以上是golang json 類型轉換的詳細內容。更多資訊請關注PHP中文網其他相關文章!