zoukankan      html  css  js  c++  java
  • golang json基本操作

    JSON解析内置反射方式

    import (
        "encoding/json"
        "fmt"
    )
     
    type Users struct {
        ID   string `json:"id"`
        Name string `json:"name"`
        Age  int    `json:"age"`
    }
     
    func main() {
        //结构体解析成json
        user1 := Users{"1", "user1", 22}
        s, err := json.Marshal(user1)
        if err != nil {
            fmt.Println(err)
        } else {
            fmt.Println(string(s))
        }
        //json解析到结构体
        var user2 Users
        err = json.Unmarshal(s, &user2)
        if err == nil {
            fmt.Println(user2)
        }
        //map解析成json
        m := make(map[string]interface{}, 2)
        m["id"] = "a"
        m["name"] = "bb"
        var data []byte
        if data, err = json.Marshal(m); err == nil {
            fmt.Println(string(data))
        }
        //json解析成map
        if err = json.Unmarshal(data, &m); err == nil {
            fmt.Println(m)
        }
     
    }
    

    easyJSON高性能代码生成解析JSON

    安装:
    go get github.com/mailru/easyjson
    如果失败,可以将项目克隆到$GOPATH/src/mailru 目录下 并将包名改为easyjson,然后进入easyjson包下的easyjson目录,运行go build 命令,再将生成的二进制文件放到$GOPATH/bin目录下并改名为easyjson

    使用:输入命令easyjson -all models.go生成文件

    type BasicInfo struct {
        Name string
        Age  int   
    }
    type JobInfo struct {
        Skills []string
    }
    type Employee struct {
        BasicInfo BasicInfo
        JobInfo   JobInfo  
    }
     
    var jsonStr = `{
        "basic_info":{
            "name":"Mike",
            "age":30
        },
        "job_info":{
            "skills":["Java","Go","C"]
        }
    }   `
     
    func TestEasyJSON(t *testing.T) {
        e := Employee{}
      //调用easyJSON生成函数解析json
        e.UnmarshalJSON([]byte(jsonStr))
        t.Log(e)
      //调用easyJSON生成函数解析json
        if v, err := e.MarshalJSON(); err != nil {
            t.Error(err)
        } else {
            t.Log(string(v))
        }
    }
    
  • 相关阅读:
    [Zjoi2006]GameZ游戏排名系统
    二逼平衡树
    郁闷的小J
    Dynamic Rankings
    数列[专杀Splay版]
    星际争霸
    半平面交
    自适应辛普森
    7月31日
    规约先行-(三)代码格式
  • 原文地址:https://www.cnblogs.com/enumx/p/12317955.html
Copyright © 2011-2022 走看看