golang如何解析/反序列化动态 JSON
在 Golang 中,可以使用 json.Unmarshal()
函数将 JSON 字符串反序列化为动态的 map[string]interface{}
或 []interface{}
。这个函数需要两个参数,第一个是要反序列化的 JSON 字符串,第二个是反序列化后的数据结构指针。例如:
import ( "encoding/json" "fmt" ) func main() { jsonString := `{"name": "Alice", "age": 30}` var data map[string]interface{} err := json.Unmarshal([]byte(jsonString), &data) if err != nil { panic(err) } fmt.Println(data["name"]) // Output: Alice fmt.Println(data["age"]) // Output: 30 }
在这个例子中,我们使用 json.Unmarshal()
将 JSON 字符串反序列化为 map[string]interface{}
类型的 data
变量。由于 JSON 中的键值对是动态的,因此我们使用 map[string]interface{}
类型来存储这些数据。反序列化后,我们可以像访问普通的 map 一样访问其中的数据。
如果 JSON 中包含了数组,我们可以将其反序列化为 []interface{}
类型的变量。例如:
import ( "encoding/json" "fmt" ) func main() { jsonString := `[1, "two", {"three": 3}]` var data []interface{} err := json.Unmarshal([]byte(jsonString), &data) if err != nil { panic(err) } fmt.Println(data[0]) // Output: 1 fmt.Println(data[1]) // Output: two fmt.Println(data[2].(map[string]interface{})["three"]) // Output: 3 }
在这个例子中,我们使用 json.Unmarshal()
将 JSON 字符串反序列化为 []interface{}
类型的 data
变量。由于 JSON 中的数组是动态的,因此我们使用 []interface{}
类型来存储这些数据。反序列化后,我们可以像访问普通的数组一样访问其中的数据。注意,这里我们使用了类型断言来将 data[2]
转换为 map[string]interface{}
类型,以便访问其中的键值对。