go 读取json文件内容,并且解析内容到interface、 map、 struct

1,解析到interface、 map

复制代码
func ReadAllFileContent(fileName string) {
	file, err := os.Open(fileName)
	if err != nil {
		log.Fatal(err)
	}
	defer file.Close()
	// buf := make([]byte, 2024)

	data, err := ioutil.ReadAll(file) //读取的结果是[]byte类型
	if err != nil {
		log.Fatal(err)
	}

	var result interface{}
	err = json.Unmarshal(data, &result)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(result)
	map_data := result.(map[string]interface{}) //interface如何转换为map:类型断言是类型安全的,并且只有当接口变量确实存储了你所期望的具体类型时才会成功。

	for k, v := range map_data {
		fmt.Println(k, v)
	}
	var result2 map[string]interface{}
	err = json.Unmarshal(data, &result2)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("-------------")
	//一般写为如下形式
	if map_data2, ok := result2["data"].(map[string]interface{}); ok {
		fmt.Println(map_data2["name"])
	}

}

打印结果:

msg ok

code 200

data map[age:18 name:张三 sex:男]


张三

注意:

1,读取文件使用ioutil.ReadAll,读取的结果是[]byte类型

data, err := ioutil.ReadAll(file)

2, json.Unmarshal将[]byte类型转换为interface, result是interface,使用的使用要类型转换

err = json.Unmarshal(data, &result)

map_data := result.(map[string]interface{})

interface如何转换为map:类型断言是类型安全的,并且只有当接口变量确实存储了你所期望的具体类型时才会成功。

2,解析到struct

复制代码
	type UserInfo struct {
		Name string `json:"name"`
		Age  int    `json:"age"`
		Sex  string `json:"sex"`
	}
	type resContent struct {
		Code int      `json:"code"`
		Msg  string   `json:"msg"`
		Data UserInfo `json:"data"`
	}
	fmt.Println("-------------")

	var result3 resContent
	err = json.Unmarshal(data, &result3)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(result3.Data.Name)
	fmt.Println(result3.Code)

struct内部属性大写, 否则无法引用。

`json:"code"`后是json格式数据流中对应的名称,写对了可以直接对应。

struct中多字段,缺少对应json格式数据流中字段,不报错

相关推荐
加号341 分钟前
【Qt】 应用程序发布:依赖库拷贝与部署指南
开发语言·qt
('-')1 小时前
八股复习2:Java Array list和Linked list
java·开发语言
小黄人软件1 小时前
C++读写编辑CSV文件示例源码 用于数据导入导出,比Excel好使
开发语言·c++·excel
郭涤生2 小时前
C++各个版本的性能和安全性总结
开发语言·c++
wljy13 小时前
二、静态库的制作和使用
linux·c语言·开发语言·c++
道剑剑非道3 小时前
FFmpeg 6.0 实战:用 C++ 封装摄像头采集与 RTSP 推流
开发语言·c++·ffmpeg
天天进步20153 小时前
Python全栈项目实战:基于深度学习的语音合成(TTS)系统
开发语言·python·深度学习
OctShop大型商城源码3 小时前
.NET线上商城源码_C#商城源码_技术赋能下的电商新生态
开发语言·c#·.net·商城系统源码
IT猿手4 小时前
光伏模型参数估计:基于山羊优化算法(GOA )的光伏模型参数辨识问题求解研究,免费提供完整MATLAB代码链接
开发语言·算法·matlab·群智能优化算法·智能优化算法·光伏模型参数估计·光伏模型参数辨识
xrgs_shz4 小时前
【高光谱数据处理实战】基于Python的ENVI图像交互式裁剪与光谱数据预处理
开发语言·图像处理·python