总结:

其他类型转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. 沉淀再出发:ELK使用初探

    沉淀再出发:ELK使用初探 一.前言 ELK是Elasticsearch.Logstash.Kibana的简称,这三者是核心套件,但并非全部. 最近ElasticSearch可以说是非常火的一款开源软 ...

  2. 如何查看SharePoint Server的版本信息

    可以通过查看注册表来得你当前运行的是SharePoint 2010的哪个版本,具体步骤如下: 1. 登录到安装了SharePoint Central Administration 的服务器. 2. 点 ...

  3. 41、Thead线程 System.Thread与互斥体Mutex

    Thead线程 System.Thread 使用Thread类可以创建和控制线程.下面的代码是创建和启动一个新线程的简单例子.Thread 类的构造函数重载为接受ThreadStart和Paramet ...

  4. Current urgent plan(3/30)

    1. resume improving 1.1 project from Udacity 1.2 project from class 1.3 find career center's help 1. ...

  5. Eclipse中的BuildPath详解【转载】

    什么是Build Path? Build Path是指定Java工程所包含的资源属性集合. 在一个成熟的Java工程中,不仅仅有自己编写的源代码,还需要引用系统运行库(JRE).第三方的功能扩展库.工 ...

  6. Shell传递参数【转载】

    Shell 传递参数 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 实例 以 ...

  7. Guava包学习---I/O

    Guava的I/O平时使用不太多,目前项目原因导致基本上只有在自己写一些文本处理小工具才用得到.但是I/O始终是程序猿最常遇到的需求和面试必问的知识点之一.同时Guava的I/O主要面向是时JDK5和 ...

  8. disconf实践(四)基于注解的分布式配置文件管理,自动reload

    上一篇讲解了基于xml的自动reload的分布式配置文件管理,这一篇讲解基于注解的自动reload的方式(基于disconf实践二). 1. 修改spring配置文件 <?xml version ...

  9. NPOI下载

    .吐槽NPOI下载 众所周知我们用NPOI第三方程序集主要的目的就是为了能快捷的操作Excel,但是现在不论是官网(https://archive.codeplex.com/?p=npoi)还是git ...

  10. PAT——1056. 组合数的和

    给定N个非0的个位数字,用其中任意2个数字都可以组合成1个2位的数字.要求所有可能组合出来的2位数字的和.例如给定2.5.8,则可以组合出:25.28.52.58.82.85,它们的和为330. 输入 ...