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格式数据流中字段,不报错

最近更新

  1. TCP协议是安全的吗?

    2024-06-08 17:54:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-08 17:54:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-08 17:54:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-08 17:54:01       20 阅读

热门阅读

  1. h5 拍照后压缩图片上传 方法直接用

    2024-06-08 17:54:01       11 阅读
  2. 系统与软件工程软件测试设计技术

    2024-06-08 17:54:01       9 阅读
  3. 图论第6天

    2024-06-08 17:54:01       9 阅读
  4. Decimal要从str转换以避免精度问题

    2024-06-08 17:54:01       9 阅读
  5. 005 CentOS 7.9 RabbitMQ安装及配置

    2024-06-08 17:54:01       16 阅读
  6. python使用appium设置会话时长

    2024-06-08 17:54:01       9 阅读
  7. Markdown入门语法笔记

    2024-06-08 17:54:01       11 阅读
  8. 排序---归并排序(简单优化前后比较)

    2024-06-08 17:54:01       9 阅读