总结:

其他类型转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. Linux入门-9 软件管理基础(CentOS)

    0. 源代码形式 1. RPM软件包管理 RPM RPM查询 RPM验证 2. YUM软件管理 YUM基本命令 YUM查询 创建YUM仓库 0. 源代码形式 绝大多数开源软件都是直接以源代码形式发布 ...

  2. 乘风破浪:LeetCode真题_001_TwoSum

    乘风破浪:LeetCode真题_001_TwoSum 一.前言 沉寂了很长时间,也悟出了很多的道理,写作是一种业余的爱好,是一种自己以后学习的工具,是对自己过往的经验积累的佐证,是检验自己理解深入度的 ...

  3. ZT --- extern "C"用法详解 2010-08-21 19:14:12

    extern "C"用法详解 2010-08-21 19:14:12 分类: C/C++ 1.前言: 时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus ...

  4. GPL & Apache License

    Copyleft[编辑] GPL不会授予许可证接受人无限的权利.再发行权的授予需要许可证接受人开放软件的源代码,及所有修改.且复制件.修改版本,都必须以GPL为许可证. 这些要求就是copyleft, ...

  5. [UOJ 0034] 多项式乘法

    #34. 多项式乘法 统计 描述 提交 自定义测试 这是一道模板题. 给你两个多项式,请输出乘起来后的多项式. 输入格式 第一行两个整数 nn 和 mm,分别表示两个多项式的次数. 第二行 n+1n+ ...

  6. 软工团队 - 预则立&&他山之石

    软工团队 - 预则立&&他山之石 团队任务计划 时间 人员 任务 10.23-10.29 张昭锡 初拟Android代码规范 李永盛 初拟PHP代码规范 刘晨瑶 初拟Git代码规范 刘 ...

  7. linux下Python3的安装

    linux平台下,需要gcc和openssl-devel的依赖包,所以没有的话需要先安装: yum -y install gcc*   yum -y install openssl-devel 然后将 ...

  8. js 调用 oc 的解释

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

  9. 2018-2019-2 网络对抗技术 20165322 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165322 Exp1 PC平台逆向破解 目录 知识点总结 实验准备 任务一:直接修改程序机器指令,改变程序执行流程 任务二 通过构造输入参数,造成BOF攻击 ...

  10. VIM在Win7上的安装教程

    1.下载 目前VIM在其官网上的最新版本为7.4,Windows版本名称为GVIM,在百度软件中可以下载GVIM的最新版本,建议 在百度上下载,因为比较快.在百度上搜索"GVIM" ...