总结:

其他类型转json

func Marshal(v interface{}) ([]byte, error) 

json 转其他类型

func Unmarshal(data []byte, v interface{}) error
  • 结构体生成json
/*
1、结构体转json json.Marshal
*/ package main import (
"encoding/json"
"fmt"
) type IT struct {
Company string `json:"-"` // 不解析
Subjects []string `json:"subjects"` //小写
Isok bool `json:",string"` // 转nstring
Price float64 `json:",string"` //转nsstring
} func main() { it := IT{"itcast", []string{"go", "c++", "test"}, true, 990.232} // buf, error := json.Marshal(it)
buf, error := json.MarshalIndent(it, "", "") //格式化 if error != nil {
fmt.Println("email====yes", error)
return
} else { json := string(buf)
fmt.Println(json) //
/*
{
"subjects": [
"go",
"c++",
"test"
],
"Isok": "true",
"Price": "990.232"
}
*/ } }
  • map转json
/*
1、map转json json.Marshal
*/
package main import (
"encoding/json"
"fmt"
) type IT struct {
Company string
Subjects []string
Isok bool
Price float64
} func main() { // 创建map
m := make(map[string]interface{}, )
m["company"] = "google"
m["subjects"] = []string{"go", "c++", "test"}
m["price"] = 888.88
m["isok"] = true buf, error := json.Marshal(m)
if error != nil {
fmt.Println("email====yes", error)
return
} else { json := string(buf)
fmt.Println(json)
//{"Company":"google","Isok":true,"Price":888.88,"Subjects":["go","c++","test"]} }
}
  • json转结构体
/*
1、json 转结构体 json.Unmarshal([]byte(jsonBuf), &it) */ package main import (
"encoding/json"
"fmt"
) type IT struct {
Company string
Subjects []string
Isok bool
Price float64
} func main() { jsonBuf := `
{
"company": "itcast",
"subjects": [
"Go",
"C++",
"Python",
"Test"
],
"isok": true,
"price": 666.666
}` var it IT
json.Unmarshal([]byte(jsonBuf), &it) fmt.Println(it) //{itcast [Go C++ Python Test] true 666.666} }
  • 解析到map
  • /*
    1、json 转map json.Unmarshal([]byte(jsonBuf), &it)
    */
    package main import (
    "encoding/json"
    "fmt"
    ) func main() { jsonBuf := `
    {
    "company": "itcast",
    "subjects": [
    "Go",
    "C++",
    "Python",
    "Test"
    ],
    "isok": true,
    "price": 666.666
    }` var mapResult map[string]interface{} json.Unmarshal([]byte(jsonBuf), &mapResult) fmt.Printf("m====%+v\n", mapResult)
    //map[subjects:[Go C++ Python Test] isok:true price:666.666 company:itcast] for key, value := range mapResult { // fmt.Printf("%v ===========%v\n", key, value) switch data := value.(type) {
    case string:
    fmt.Printf("map[%s] =====string=====%s\n", key, data) case bool:
    fmt.Printf("map[%s] ======bool====%t\n", key, data) case float64:
    fmt.Printf("map[%s] ======float64====%f\n", key, data) case []interface{}: fmt.Printf("map[%s] ======[]interface{}====%s\n", key, data) } }
    }

go_json解析的更多相关文章

  1. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  2. .NET Core中的认证管理解析

    .NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...

  3. Html Agility Pack 解析Html

    Hello 好久不见 哈哈,今天给大家分享一个解析Html的类库 Html Agility Pack.这个适用于想获取某网页里面的部分内容.今天就拿我的Csdn的博客列表来举例. 打开页面  用Fir ...

  4. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  5. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  6. 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  7. Asp.Net WebApi核心对象解析(下篇)

    在接着写Asp.Net WebApi核心对象解析(下篇)之前,还是一如既往的扯扯淡,元旦刚过,整个人还是处于晕的状态,一大早就来处理系统BUG,简直是坑爹(好在没让我元旦赶过来该BUG),队友挖的坑, ...

  8. 【知识必备】内存泄漏全解析,从此拒绝ANR,让OOM远离你的身边,跟内存泄漏say byebye

    一.写在前面 对于C++来说,内存泄漏就是new出来的对象没有delete,俗称野指针:而对于java来说,就是new出来的Object放在Heap上无法被GC回收:而这里就把我之前的一篇内存泄漏的总 ...

  9. SQL Server 数据加密功能解析

    SQL Server 数据加密功能解析 转载自: 腾云阁 https://www.qcloud.com/community/article/194 数据加密是数据库被破解.物理介质被盗.备份被窃取的最 ...

随机推荐

  1. Thinkphp 漏洞小试

    首先确定这个网站使用thinkphp的框架 国内很多php开源项目的代码都是使用thinkphp框架编写的,但是thinkphp框架有很多版本,如何才能知道我们使用的框架是哪个版本的呢? 在URL后面 ...

  2. Linux CPU的中断【转载】

    中断其实就是由硬件或软件所发送的一种称为IRQ(中断请求)的信号. 中断允许让设备,如键盘,串口卡,并口等设备表明它们需要CPU. 一旦CPU接收了中断请求,CPU就会暂时停止执行正在运行的程序,并且 ...

  3. mysql安装linux_二进制包安装

    1.下载(本地下载www.mysql.com ----->DOWNlOADS------>Archives----->MySQL Community Server---->Li ...

  4. js 调用 oc 的解释

    JavaScriptCore NSInvocation js解释器在解释函数调用时,会在执行环境进行函数搜索,主调者类型判定: 如果是js调用,直接解释执行: 如果是oc调用,则将调用打包成NSInv ...

  5. linq注意错误

    使用EntityFramework6连接MySql数据库(db first方式) 准备工具: VS2013.MySQL For VisualStudio 1.1.4.Connector/Net 6.8 ...

  6. Convolution1D与Convolution2D区别

    以下是Convolution1D的例子: # apply a convolution 1d of length 3 to a sequence with 10 timesteps, # with 64 ...

  7. 编程中关于对时区的理解(语言PHP)

    时间戳 首先来说说time()返回的时间戳,时间戳则是自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数. 格林威治 由于地球圆的,因此每个时区的时间 ...

  8. week9:Recommender Systems

    Collaborative  filtering 的原理不是很理解? xi   是每一步电影的特征向量,表示浪漫/动作

  9. 软工之词频统计器及基于sketch在大数据下的词频统计设计

    目录 摘要 算法关键 红黑树 稳定排序 代码框架 .h文件: .cpp文件 频率统计器的实现 接口设计与实现 接口设计 核心功能词频统计器流程 效果 单元测试 性能分析 性能分析图 问题发现 解决方案 ...

  10. 学习VCL之路(1)

    在TObject类中,有一个Dispatch()方法和一个DefaultHandler()方法,它们都是与消息分发机制相关的. Dispatch()负责将特定的消息分发给合适的消息处理函数.首先它会在 ...