zoukankan      html  css  js  c++  java
  • Golang

    Golang - 处理json

     

    Golang - 处理json

    1. 编码json

    • 使用json.Marshal()函数可以对一组数据进行JSON格式的编码
    • func Marshal(v interface{}) ([]byte, error)
    • 通过结构体生成json,结构体属性字段名首字母要大写

        package main
      
        import (
           "encoding/json"
           "fmt"
        )
      
        type Person struct {
           Name  string
           Hobby string
        }
      
        func main() {
           p := Person{"luhan", "男"}
           //1.生成JSON文本
           b, err := json.Marshal(p)
           if err != nil {
              fmt.Println("json err:", err)
           }
           fmt.Println(string(b))
           //2.生成格式化json,没啥用
           b, err = json.MarshalIndent(p, "", "    ")
           if err != nil {
              fmt.Println("json err:", err)
           }
           fmt.Println(string(b))
        }

    struct tag
    -是隐藏字段

    也可以直接写别名,包含首字母小写的单词

    通过map生成json

    package main
    
    import (
       "encoding/json"
       "fmt"
    )
    
    func main() {
       //创建map
       mmp := make(map[string]interface{})
       mmp["name"] = "luhan"
       mmp["age"] = 56
       mmp["niubility"] = true
    
       //map转为json
       mjson, err := json.Marshal(mmp)
       if err != nil {
          fmt.Println("json err:", err)
       }
       fmt.Println(string(mjson))
    }

    2. 解码json

    解析到结构体

    package main
    
    import (
       "encoding/json"
       "fmt"
    )
    
    type Person struct {
       Name  string `json:"name"`
       Hobby string `json:"hobby"`
    }
    
    func main() {
       //1.准备一段json
       b := []byte(`{"Name":"luhan","Hobby":"男"}`)
       //2.声明结构体
       var p Person
       //3.解析
       err := json.Unmarshal(b, &p)
       if err != nil {
          fmt.Println("json err:", err)
       }
       fmt.Println(p)
    }

    解析到interface

    package main
    
    import (
       "encoding/json"
       "fmt"
    )
    
    func main() {
       //1.准备一段json
       b := []byte(`{"Name":"luhan","Hobby":"男"}`)
       //2.声明空接口
       var i interface{}
       //3.解析
       err := json.Unmarshal(b, &i)
       if err != nil {
          fmt.Println("json err:", err)
       }
       //自动转map
       fmt.Println(i)
       //4.使用interface的json,可以判断类型
       m := i.(map[string]interface{})
       for k, v := range m {
          switch vv := v.(type) {
          case string:
             fmt.Println(k, "是string类型", vv)
          case int:
             fmt.Println(k, "是int类型", vv)
          default:
             fmt.Println(k, "是其他类型")
          }
       }
    }
     
     
  • 相关阅读:
    jQuery杂项方法
    nodeJS实现路由功能
    nodeJS之HTTP
    nodeJS之TCP模块net
    nodeJS之事件events
    NodeJS之queryString
    chrome谷歌浏览器用这种方式清除缓存比较方便了,必须是调试模式才行
    DeepMind已将AlphaGo引入多领域 Al泡沫严重
    学习Linux的正确姿势
    现在90,00后经常上哪些网站?喜欢看啥网站?
  • 原文地址:https://www.cnblogs.com/yanghongtao/p/10970395.html
Copyright © 2011-2022 走看看