当前位置: 首页 > news >正文

Golang操作结构体、Map转化为JSON

结构体生成Json

package main

import (
    "encoding/json"
    "fmt"
)

type IT struct {
    Company string `json:"-"` //此字段不会输出到屏幕
    //Company  string   `json:"company"`       这样打印输出别名首字母就会小写(二次编码)
    Subjects []string `json:"subjects"` //二次编码
    IsOk     bool     `json:",string"`
    Price    float64  `json:",string"`
}

func main() {
    //定义一个结构体变量,同时初始化
    s := IT{"itcast", []string{"Golang", "PHP", "Java", "C++"}, true, 666.666}

    //编码,根据内容生成json文本
    //buf, err := json.Marshal(s)
    //buf =  {"subjects":["Golang","PHP","Java","C++"],"IsOk":"true","Price":"666.666"}
    buf, err := json.MarshalIndent(s, "", "    ") //格式化编码
    if err != nil {
        fmt.Println("err = ", err)
        return
    }

    fmt.Println("buf = ", string(buf))
}
//结果
buf =  {
        "subjects": [   //首字母小写
               "Golang",
                "PHP",
                "Java",
                "C++"
        ],
       "IsOk": "true",   //string类型
       "Price": "666.666"
}

Json转成结构体

package main

import (
    "encoding/json"
    "fmt"
)

type IT struct {
    Address   string   `json:"address"`
    Languages []string `json:"languages"` //二次编码
    Status    bool     `json:"isok"`
    Price     float64  `json:"price"`
}

func main() {

    jsonBuf := `
    {
    "address": "北京",
    "languages": [
        "Golang",
        "PHP",
        "Java",
        "Python"
    ],
    "status": true,
    "price": 666.666
}`

    var tmp IT                                   //定义一个结构体变量
    err := json.Unmarshal([]byte(jsonBuf), &tmp) //第二个参数要地址传递
    if err != nil {
        fmt.Println("err = ", err)
        return
    }
    //fmt.Println("tmp = ", tmp)
    fmt.Printf("tmp = %+v\n", tmp)

    type IT2 struct {
        Subjects []string `json:"languages"` //二次编码
    }

    var tmp2 IT2
    err = json.Unmarshal([]byte(jsonBuf), &tmp2) //第二个参数要地址传递
    if err != nil {
        fmt.Println("err = ", err)
        return
    }
    fmt.Printf("tmp2 = %+v\n", tmp2)

}
tmp = {Address:北京 Languages:[Golang PHP Java Python] Status:false Price:666.666}
tmp2 = {Subjects:[Golang PHP Java Python]}

Map生成Json

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    //创建一个map
    m := make(map[string]interface{}, 4) //因为类型多,可以用interface空接口
    m["address"] = "北京"
    m["languages"] = []string{"Golang", "PHP", "Java", "Python"}
    m["status"] = true
    m["price"] = 666.666

    //编码成json
    //result, err := json.Marshal(m)
    //result =  {"address":"北京","languages":["Golang","PHP","Java","Python"],"price":666.666,"status":true}
    result, err := json.MarshalIndent(m, "", "    ")
    if err != nil {
        fmt.Println("err = ", err)
        return
    }
    fmt.Println("result = ", string(result))
}
result =  {
        "address": "北京",
        "languages": [
                "Golang",
                "PHP",
                "Java",
                "Python"
        ],
        "price": 666.666,
        "status": true
}

Json转化为Map

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    jsonBuf := `
    {
    "company": "itcast",
    "subjects": [
        "Go",
        "C++",
        "Python",
        "Test"
    ],
    "isok": true,
    "price": 666.666
}`

    //创建一个map
    m := make(map[string]interface{}, 4)

    err := json.Unmarshal([]byte(jsonBuf), &m) //第二个参数要地址传递
    if err != nil {
        fmt.Println("err = ", err)
        return
    }
    fmt.Printf("m = %+v\n", m)

    //    var str string
    //    str = string(m["company"]) //err, 无法转换
    //    fmt.Println("str = ", str)

    var str string

    //类型断言, 值,它是value类型
    for key, value := range m {
        //fmt.Printf("%v ============> %v\n", key, value)
        switch data := value.(type) {
        case string:
            str = data
            fmt.Printf("map[%s]的值类型为string, value = %s\n", key, str)
        case bool:
            fmt.Printf("map[%s]的值类型为bool, value = %v\n", key, data)
        case float64:
            fmt.Printf("map[%s]的值类型为float64, value = %f\n", key, data)
        case []string:
            fmt.Printf("map[%s]的值类型为[]string, value = %v\n", key, data)
        case []interface{}:
            fmt.Printf("map[%s]的值类型为[]interface, value = %v\n", key, data)
        }

    }

}
map[address]的值类型为string, value = 北京
map[Languages]的值类型为[]interface, value = [Golang PHP Java Python]
map[Status]的值类型为bool, value = true
map[price]的值类型为float64, value = 666.666000

 

转载于:https://www.cnblogs.com/wt645631686/p/9649379.html

相关文章:

  • 犯得错误QAQ
  • Python基础装饰器的基本原理
  • 在vue中使用animate.css
  • 集中绕组和分布绕组
  • redis pubsub
  • 【BZOJ4006】管道连接(动态规划,斯坦纳树)
  • 9-18 一次编程面试
  • python学习之路——作业 day6(18/9/18)
  • Kotlin基础学习笔记 (三)
  • 表管理
  • 《手把手教你学DSP-基于TMS320F28335》书中的错误
  • rxjs - 创建数据流
  • Visual-UIElement-FrameworkElement,带来更多功能的同时也带来了更多的限制
  • 源码探究Java_HashMap
  • python-第一个程序
  • Angular 响应式表单之下拉框
  • Angular2开发踩坑系列-生产环境编译
  • crontab执行失败的多种原因
  • Docker下部署自己的LNMP工作环境
  • Phpstorm怎样批量删除空行?
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Spring-boot 启动时碰到的错误
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Vue2 SSR 的优化之旅
  • 创建一种深思熟虑的文化
  • 从setTimeout-setInterval看JS线程
  • 服务器从安装到部署全过程(二)
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 如何胜任知名企业的商业数据分析师?
  • 三分钟教你同步 Visual Studio Code 设置
  • 我建了一个叫Hello World的项目
  • 主流的CSS水平和垂直居中技术大全
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #if和#ifdef区别
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (8)STL算法之替换
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (过滤器)Filter和(监听器)listener
  • (一)SpringBoot3---尚硅谷总结
  • (转)iOS字体
  • .NET轻量级ORM组件Dapper葵花宝典
  • .net与java建立WebService再互相调用
  • .NET值类型变量“活”在哪?
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @GetMapping和@RequestMapping的区别
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • [2023年]-hadoop面试真题(一)
  • [ASP]青辰网络考试管理系统NES X3.5
  • [C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试