{ "title": "Golang 解析不固定层级 JSON 字符串到结构体", "description": "本篇文章介绍如何使用 Golang 解析不固定层级的 JSON 字符串到结构体中。通过使用 map[string]interface{} 类型解析 JSON 字符串并进行类型断言,可以成功将数据加载到结构体中。", "keywords": "Golang, JSON, 解析, 结构体, 不固定层级, map[string]interface{}, 类型断言", "content": "在 Go 中,可以使用 json.Unmarshal() 函数将 JSON 字符串加载到结构体中。但是,由于 JSON 字符串中的层级是不固定的,我们无法提前定义一个对应的结构体。\n\n为了解决这个问题,我们可以使用 map[string]interface{} 类型来解析不固定层级的 JSON 字符串。这样可以将 JSON 字符串解析为一个嵌套的 map,其中的每个键都是字符串,每个值可以是任意类型。\n\n以下是一个示例代码,展示了如何将不固定层级的 JSON 字符串加载到结构体中:\n\ngo\npackage main\n\nimport (\n\t"encoding/json"\n\t"fmt"\n)\n\ntype Person struct {\n\tName string\n\tAge int\n\tAddress string\n}\n\nfunc main() {\n\tjsonStr := `{\n\t\t"name": "John",\n\t\t"age": 30,\n\t\t"address": {\n\t\t\t"street": "123 Main St",\n\t\t\t"city": "New York",\n\t\t\t"state": "NY"\n\t\t}\n\t}`\n\n\tvar data map[string]interface{}\n\terr := json.Unmarshal([]byte(jsonStr), &data)\n\tif err != nil {\n\t\tfmt.Println("Error:", err)\n\t\treturn\n\t}\n\n\tperson := Person{\n\t\tName: data["name"].(string),\n\t\tAge: int(data["age"].(float64)),\n\t\tAddress: data["address"].(map[string]interface{})["street"].(string),\n\t}\n\n\tfmt.Println(person)\n}\n\n\n在上面的代码中,我们首先定义了一个 Person 结构体,它有三个字段:NameAgeAddress。然后,我们定义了一个 JSON 字符串 jsonStr,其中包含了一个嵌套的 address 属性。\n\n我们使用 json.Unmarshal() 函数将 JSON 字符串解析为一个 map[string]interface{} 类型的变量 data。然后,我们可以使用 data 的键值对来构建 Person 结构体。\n\n需要注意的是,由于 json.Unmarshal() 函数将所有数字解析为 float64 类型,我们需要使用类型断言将其转换为相应的类型。同时,如果 JSON 字符串中的键不存在或类型不匹配,会导致程序运行时错误,因此需要进行错误检查。\n\n最后,我们打印输出 person 结构体的值,可以看到 JSON 字符串已成功加载到结构体中。

Golang 解析不固定层级 JSON 字符串到结构体

原文地址: https://www.cveoy.top/t/topic/p4Uj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录