go语言转换json字符串为json数据
在 Go 语言中,可以使用标准库 encoding/json
中的 json.Unmarshal
函数将 JSON 字符串转换为 JSON 数据(通常是 Go 中的结构体或 map 类型)。以下是一个简单的示例:
示例代码
package main
import (
"encoding/json"
"fmt"
"log"
)
// 定义一个结构体,用于映射 JSON 数据
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Hobbies []string `json:"hobbies"`
}
func main() {
// JSON 字符串
jsonStr := `{
"name": "John",
"age": 30,
"hobbies": ["reading", "coding"]
}`
// 创建一个结构体变量用于存储解析后的数据
var person Person
// 将 JSON 字符串解析为结构体
err := json.Unmarshal([]byte(jsonStr), &person)
if err != nil {
log.Fatalf("Error unmarshalling JSON: %v", err)
}
// 打印解析后的数据
fmt.Printf("Name: %s\n", person.Name)
fmt.Printf("Age: %d\n", person.Age)
fmt.Printf("Hobbies: %v\n", person.Hobbies)
}
代码说明
-
定义结构体:
- 使用
struct
定义一个与 JSON 数据结构对应的 Go 结构体。 - 使用
json:"key"
标签来指定 JSON 中的键与结构体字段的映射关系。
- 使用
-
json.Unmarshal
函数:json.Unmarshal(data []byte, v interface{}) error
:data
是 JSON 字符串的字节切片。v
是目标变量,用于存储解析后的数据。- 如果解析成功,
v
中会包含 JSON 数据;如果失败,会返回错误。
-
错误处理:
- 如果 JSON 格式错误或结构体字段不匹配,
json.Unmarshal
会返回错误。
- 如果 JSON 格式错误或结构体字段不匹配,
输出结果
运行上述代码后,输出如下:
Name: John
Age: 30
Hobbies: [reading coding]
使用 map
解析 JSON
如果 JSON 结构不固定,也可以使用 map[string]interface{}
来解析 JSON 数据,示例如下:
package main
import (
"encoding/json"
"fmt"
"log"
)
func main() {
jsonStr := `{
"name": "John",
"age": 30,
"hobbies": ["reading", "coding"]
}`
// 使用 map 存储解析后的数据
var data map[string]interface{}
// 解析 JSON
err := json.Unmarshal([]byte(jsonStr), &data)
if err != nil {
log.Fatalf("Error unmarshalling JSON: %v", err)
}
// 访问 map 中的数据
fmt.Printf("Name: %v\n", data["name"])
fmt.Printf("Age: %v\n", data["age"])
fmt.Printf("Hobbies: %v\n", data["hobbies"])
}
这种方式更加灵活,但需要通过类型断言来访问具体字段的值。
希望这些示例对你有帮助!