总结:

其他类型转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. 一些实用的adb命令

    一.前提: 1.打开手机调试模式,确保手机已正常连接电脑,可在电脑上通过adb devices命令查看,结果如下说明连接成功: List of devices attached90xxxxc9 dev ...

  2. 关于options请求的一点理解

    最近最项目改造,对所有的ajax请求统一做了一点处理,发现原来很正经的ajax请求突然不正常了,每个ajax之前都多了一个相应的method为options的请求.虽然之前知道ajax的请求中meth ...

  3. python process,queue

    #-*- coding:utf-8 -*- from multiprocessing import Process,Queue import os,time,random def write(q): ...

  4. ubuntu命令安装jdk

    1.ubuntu使用的是openjdk,所以我们需要先找到合适的jdk版本.在命令行中输入命令: $apt-cache search openjdk 1 返回结果列表(因个人电脑而有所不同): def ...

  5. UVa 11346 - Probability(几何概型)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  6. [19/05/01-星期三] GOF23_行为型模式(策略模式、模板方法模式)

    一.策略模式(strategy) [策略接口] /*** * "策略"接口 */ package cn.sxt.strategy; public interface Strateg ...

  7. 2048总结 JavaScript+jQuery(取元素方便,.css,text方法)

    Html部分(界面):1.开始新游戏:2.返回上一步:3.记分栏: 4.16个小格组成: 其中1,2由链接形式实现. a标签中href属性调用js方法: <a href="javasc ...

  8. [转]百度地图API详解之地图坐标系统

    博客原文地址:http://www.jiazhengblog.com/blog/2011/07/02/289/ 我们都知道地球是圆的,电脑显示器是平的,要想让位于球面的形状显示在平面的显示器上就必然需 ...

  9. 从零搭建vue

    第一步: 安装node.js,一般安装 长期维护版  相对比较稳定 点击下载,下载好了之后双击运行,可选择安装路径,然后一路下一步即可. 安装完成后,在cmd输入 node -v 如果出现版本号,则安 ...

  10. ubuntu查询命令行安装的软件的安装路径

    which git // 查询git的安装路径