发布时间:2024-12-22 17:24:48
{ "name": "John", "age": 30, "city": "New York" }
我们可以定义如下结构体来映射该JSON字符串的结构:type Person struct { Name string `json:"name"` Age int `json:"age"` City string `json:"city"` }
在上述结构体中,我们使用了`json`标签来指定JSON字符串中对应字段的名称。 然后,我们可以使用`json.Unmarshal()`函数将JSON字符串解析到定义的结构体中。以下是一个完整的示例:package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` City string `json:"city"` } func main() { jsonString := `{ "name": "John", "age": 30, "city": "New York" }` var person Person err := json.Unmarshal([]byte(jsonString), &person) if err != nil { fmt.Println("Error:", err) return } fmt.Println("Name:", person.Name) fmt.Println("Age:", person.Age) fmt.Println("City:", person.City) }
在上述示例中,我们通过`json.Unmarshal()`函数将JSON字符串解析到`person`变量中。注意,我们需要将JSON字符串转换为字节切片(`[]byte`)作为`json.Unmarshal()`函数的第一个参数。 解析后,我们可以通过访问相应的字段来获取JSON中的数据。type Address struct { City string `json:"city"` Country string `json:"country"` } type Person struct { Name string `json:"name"` Age int `json:"age"` Address Address `json:"address"` }
上述示例中,我们在`Person`结构体中嵌套了`Address`结构体。通过这种方式,我们可以轻松地处理嵌套的JSON数据。jsonString := `["apple", "banana", "cherry"]` var fruits []interface{} err := json.Unmarshal([]byte(jsonString), &fruits) if err != nil { fmt.Println("Error:", err) return } for _, fruit := range fruits { fmt.Println(fruit) }
在上述示例中,我们使用`[]interface{}`类型来定义一个可变大小的数组。然后,通过`json.Unmarshal()`函数将JSON数组解析到该数组变量中。最后,我们可以通过遍历数组来访问其中的元素。jsonString := `{ "name": "John", "age": 30, "isMarried": true }` var data map[string]interface{} err := json.Unmarshal([]byte(jsonString), &data) if err != nil { fmt.Println("Error:", err) return } for key, value := range data { fmt.Println(key, ":", value) }
在上述示例中,我们使用`map[string]interface{}`类型来定义一个键值对的映射。然后,通过`json.Unmarshal()`函数将JSON字符串解析到该映射变量中。最后,我们可以通过遍历映射来访问其中的键和值。