总结:

其他类型转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. Python学习---生成器的学习1210

    在Python中,这种一边循环一边计算的机制,称为生成器: 结论: 生成器本质是一个函数,不同于函数的是它生成的是一个对象,不执行函数内的代码 1.1. 列表生成器 列表生成器: 列表是直接生成数字在 ...

  2. Java学习---RMI 技术分析[Hessian]

    一.什么是Hessian Hessian 是一个基于 binary-RPC 实现的远程通讯 library.使用二进制传输数据.Hessian通常通过Web应用来提供服务,通过接口暴露.Servlet ...

  3. Asp.Net MVC Identity 2.2.1 使用技巧(八)

    一.添加管理链接 在View/Shared/_layout.cshtml,在页面导航上(28行)添加如下代码: @*通过身份验证并确认用户属于Admin角色显示管理菜单*@ @if (Request. ...

  4. php中上传图片

    这里来看看php中如何上传图片的 先看代码check_image.php <html> <head> <title></title> <style ...

  5. ZT 分智网博客 – 职场、面试技巧、职业规划

    http://blog.fenzhi.com/archives/5148.html 分智网博客 – 职场.面试技巧.职业规划 软件工程师职位薪酬最高的25家中国公司 作者: 分智网 日期: 2013 ...

  6. 程序人生:01如何做到招聘要求中的“要有扎实的Java基础”

    本文摘自左潇龙博客,原文出处:http://www.zuoxiaolong.com/html/article_232.html 来历 本文来自于一次和群里猿友的交流,具体的情况且听LZ慢慢道来. 一日 ...

  7. [CQOI2006]凸多边形(半平面相交)

    嘟嘟嘟 本来我要写feng shui这道题的.然后网上都说什么半平面相交,于是我还得现学这个东西,就来刷这道模板题了. 所谓的半平面相交和高中数学的分数规划特别像.比如这道题,把每一条边看成一条有向直 ...

  8. Spark读写HBase时出现的问题--RpcRetryingCaller: Call exception

    问题描述 Exception in thread "main" org.apache.hadoop.hbase.client.RetriesExhaustedException: ...

  9. loadrunner脚本中参数化和返回值输出log到外部文件

    loadrunner脚本中参数化和返回值输出log到外部文件 很多时候,我们在做性能测试之前,需要造数据,但是使用的这些参数化数据和生成的返回数据在后面的测试都会用的,所以我们需要在造数据过程中,将参 ...

  10. web测试--测试点

    转载自:51Testing 首先,查找需求说明.网站设计等相关文档,分析测试需求,制定测试计划,确定测试范围和测试策略,一般包括以下几个部分:功能性测试:界面测试:性能测试:数据库测试:安全性测试:兼 ...