ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Golang Json数据处理方法

2020-02-28 20:02:44  阅读:235  来源: 互联网

标签:map running name json Golang Json 数据处理 hobby data


json数据处理方法一

我们可以直接将json数据映射到预定义好的结构体中,但是必须要确保json的字段和结构体必须要一致
假设我们有如下data.json文件:

{
    "group":"1012",
    "info":[
      {
            "name":"Jack",
            "hobby":"basketball"
       },
       {
            "name":"Xander",
            "hobby":"running"
        },
        {
            "name":"Eric",
            "hobby":"running"
        }

    ]
}

代码示例:

package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
)

type (
    studentInfo struct {
        Name  string `json:"name"`
        Hobby string `json:"hobby"`
    }

    class struct {
        Group string `json:"group"`
        Info  []studentInfo `json:"info"`
    }
)

func main(){
    var data class

    // 读取json文件内容 返回字节切片
    bytes,_ := ioutil.ReadFile("data.json")

    // 将字节切片映射到指定结构体上
    json.Unmarshal(bytes,&data)

    // 打印对象结构
    fmt.Println(data)

    // 循环所有学生的信息
    for idx,val := range data.Info{
        fmt.Printf("index: %v 学生名:%v,爱好: %v\n",idx,val.Name,val.Hobby)
    }

    // 更改值
    data.Group = "1013"
}

运行该程序后,控制台打印如下信息:

{1012 [{Jack basketball} {Xander running} {Eric running}]}
index: 0 学生名:Jack,爱好: basketball
index: 1 学生名:Xander,爱好: running
index: 2 学生名:Eric,爱好: running

json数据处理方式二

但是有的时候,如果JSON数据的定义过于复杂化,我们就很需要一种灵活的方式来处理,在这种情况下,可以将JSON数据映射到一个map结构中
假设我们有如下data.json文件:

[
    "class":{
        "name":"1013",
        "teacher":"Mora"
    },
    "info":[
      {
            "name":"Jack",
            "hobby":"basketball"
       },
       {
            "name":"Xander",
            "hobby":"running"
        },
        {
            "name":"Eric",
            "hobby":"running"
        }

    ]
]

代码示例:

package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
)

func main(){

    // 读取json文件内容 返回字节切片
    bytes,_ := ioutil.ReadFile("data.json")

    // 将字节切片映射到指定map上
    // key:string类型,value:interface{}  类型能存任何数据类型
    var jsonObj map[string]interface{}
    json.Unmarshal(bytes,&jsonObj)

    // 将key:info 转换为[]interface{}类型(必须先转换成该类型才能实现range操作)
    stu := jsonObj["info"].([]interface{})

    // 打印对象结构
    fmt.Println(jsonObj)

    // 打印所有学生信息
    for idx,item := range stu {
        // 同样,遍历的时候也需要做转换
        x := item.(map[string]interface{})
        // 更改名字
        //x["name"] = string("xxx")
        fmt.Println(idx,x["name"])
    }

}

运行该程序后,控制台打印如下信息:

map[group:1012 info:[map[hobby:basketball name:Jack] map[hobby:running name:Xander] map[hobby:running name:Eric]]]

0 Jack
1 Xander
2 Eric

标签:map,running,name,json,Golang,Json,数据处理,hobby,data
来源: https://www.cnblogs.com/jasonminghao/p/12379839.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有