在 golang 中,json 是一种重要的数据格式,因为其可以方便的进行数据传输和存储。在处理 json 数据时,类型转换是非常常见的操作,本文将介绍 golang 中的 json 类型转换。
在进行 JSON 类型转换之前,我们需要了解 JSON 中的数据类型。JSON 数据类型与 Golang 中的数据类型不完全对应,JSON 中有以下 6 种数据类型:
在 Golang 中,我们可以使用以下类型来表示 JSON 数据类型:
在进行 JSON 类型转换之前,首先需要了解 JSON 解析与编码。
通过 encoding/json 包中的 Decode 方法,可以将一个字符串或字节数组解析为 JSON 对象。例如:
立即学习“go语言免费学习笔记(深入)”;
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{} 等基础数据类型也是可以的。
在解析 JSON 数据后,我们可以将 JSON 对象转换为 Golang 中的基础数据类型,例如 int、string、bool 等,也可以将 JSON 数组转换为 Golang 中的数组,或是将 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。
将 JSON 中的字符串转换为 Golang 中的 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。
将 JSON 中的数组转换为 Golang 中的 []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 数组的每个元素都被正确解析了。
将 JSON 中的对象转换为 Golang 中的 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。
将 JSON 中的对象转换为 Golang 中的结构体需要指定结构体的字段,然后通过断言将结构体字段值进行赋值。例如:
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中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号