面试题答案
一键面试package main
import (
"encoding/json"
"fmt"
)
func main() {
// 示例嵌套结构的Go语言映射
nestedMap := map[string]interface{}{
"key1": "value1",
"key2": []interface{}{1, "two", map[string]interface{}{"subKey": "subValue"}},
"key3": map[string]interface{}{
"nestedKey": "nestedValue",
},
}
// 转换为JSON字符串
jsonData, err := json.MarshalIndent(nestedMap, "", " ")
if err != nil {
fmt.Printf("JSON编码错误: %v\n", err)
return
}
fmt.Println(string(jsonData))
// 反序列化JSON字符串为原始嵌套结构映射
var restoredMap map[string]interface{}
err = json.Unmarshal(jsonData, &restoredMap)
if err != nil {
fmt.Printf("JSON解码错误: %v\n", err)
return
}
fmt.Printf("恢复后的映射: %+v\n", restoredMap)
}
上述代码首先将嵌套结构的Go语言映射 map[string]interface{}
转换为JSON字符串,并处理了可能的编码错误。然后,从生成的JSON字符串反序列化回原始的嵌套结构映射,并处理可能的解码错误。
注意事项
json.MarshalIndent
函数可以使生成的JSON字符串格式化输出,更易读。- 在实际应用中,应该对可能出现的错误进行更全面的处理,如记录日志等。
- 反序列化时,
json.Unmarshal
会根据JSON的结构来推断Go语言中的类型,所以interface{}
类型在反序列化时会根据实际JSON内容正确恢复结构。