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))
        }
    }
    
  • 相关阅读:
    用面向对象的方法重写选项卡
    js 深入理解原型模式
    ECMAScript中的两种属性
    引用类型
    js 变量、作用域和内存问题
    html5 canvas画布尺寸与显示尺寸
    网页画板制作
    了解数组中的队列方法,DOM中节点的一些操作
    JavaScript中的数组对象遍历、读写、排序等操作
    this在方法赋值过程中无法保持(隐式丢失)
  • 原文地址:https://www.cnblogs.com/enumx/p/12317955.html
Copyright © 2011-2022 走看看