go语言的json
简介
json 中提供的处理 json 的标准包是 encoding/json,主要使用的是以下两个方法:
// 序列化
func Marshal(v interface{}) ([]byte, error) // 反序列化
func Unmarshal(data []byte, v interface{}) error
1、编码json
可以把一个结构体编码为json,也可以把一个map编码为json
package main import (
"encoding/json"
"fmt"
) //编码json,使用json.Marshal()函数可以对一组数据进行json格式的编码 //定义 一个结构体
type Test39Person struct {
//这里的属性必须是大写开头
Test1 string
Test2 string } //看下后面的打印就知道什么意思了,实现小写也可以了,这里也可以搞一个匿名变量,不会打印,用-
type Test39Person1 struct {
//这里的属性必须是大写开头
Test1 string `json:"-"`
Test2 string `json:"hob"` } func main() {
//1、通过结构体生成json p := Test39Person{ Test1:"abc", Test2:"ate"} p2 := Test39Person1{ Test1:"abc", Test2:"ate"} fmt.Println(p)
//1、生成json文本
b,e := json.Marshal(p)
if e != nil {
fmt.Println(e)
}
fmt.Println(string(b))
//{"Test1":"abc","Test2":"ate"} //2、生成格式化json
//prefix是前缀的意思,indent
c,e := json.MarshalIndent(p,"*"," ")
fmt.Println(string(c)) //{
// * "Test1": "abc",
// * "Test2": "ate"
// *} c,e = json.MarshalIndent(p2,"*"," ")
fmt.Println(string(c))
//{
// * "hob": "ate"
// *} //3、通过map生成json
//interface这个表示任意类型
nnp := make(map[string]interface{})
nnp["name"] = "ccc"
nnp["age"] = 12
nnp["hob"] = true f,e := json.Marshal(nnp)
if e != nil {
fmt.Println(e)
}else {
fmt.Println(string(f))
//{"age":12,"hob":true,"name":"ccc"}
} }
2、解码json
可以解码到结构体,也可以解码到接口
package main import (
"encoding/json"
"fmt"
"reflect"
) //解码json
type Test40Person struct {
//这里的属性必须是大写开头
Test1 string
Test2 string }
func main() {
//准备一段json
b := []byte(`{"Test1":"abc","Test2":"ate"}`) //把json解析到结构体
var t Test40Person e := json.Unmarshal(b,&t)
if e != nil {
fmt.Println(e)
}
fmt.Println(t,reflect.TypeOf(t))
//{abc ate} main.Test40Person //解析到接口,解析出来的数据是map
var i interface{} err := json.Unmarshal(b,&i)
if err != nil {
fmt.Println(err)
}
fmt.Println(i,reflect.TypeOf(i))
//map[Test1:abc Test2:ate] map[string]interface {} //调用interface的json,可以判断类型
m := i.(map[string]interface{})
for k,v := range m {
switch vv := v.(type) {
case string:
fmt.Println(k,"是string类型",vv)
case int:
fmt.Println(k,"是int类型",vv)
default:
fmt.Println(k,"是其他类型",vv)
} } }
1、序列化为结构体为json,采用json.Marshal()方法
package main import (
"encoding/json"
"fmt"
"reflect"
) //定义一个结构体
type Test5Person struct {
Test1 string
Test2 byte
Test3 bool
Test4 int
} func main() {
//将一个结构体序列化为json
t5_1 := Test5Person{Test1:"aaa",Test2:'b',Test3:false,Test4:12}
fmt.Println(t5_1)
//{aaa 98 false 12}
d,e := json.Marshal(t5_1)
if e != nil {
fmt.Println(e)
}else {
fmt.Println(string(d),reflect.TypeOf(d))
//{"Test1":"aaa","Test2":98,"Test3":false,"Test4":12} []uint8
}
}
2、序列化map为json,采用json.Marshal()方法
package main import (
"encoding/json"
"fmt"
) type Test6Map1 map [string] interface{} func main() {
var t6_1 = Test6Map1{"test1":"test111","test2":"test222","test3":"test333"} d,e := json.Marshal(t6_1)
if e != nil {
fmt.Println(e)
}else {
fmt.Println(string(d))
} var t6_2 = make(map[int]interface{},10)
t6_2[1] = "11111111"
t6_2[2] = 22222222
t6_2[3] = 'b'
t6_2[4] = true
t6_2[5] = 3.14
t6_2[6] = false d,e = json.Marshal(t6_2)
if e != nil {
fmt.Println(e)
}else {
fmt.Println(string(d))
} //{"1":"11111111","2":22222222,"3":98,"4":true,"5":3.14,"6":false} }
3、反序列化,采用json.Unmarshal(b,&i)方法
package main import (
"encoding/json"
"fmt"
) type Test7Person1 struct {
Name1 string
Name2 int
Name3 byte
Name4 bool
Name5 float32
//Name6 bool } func main() { //反序列化到结构体,只会反序列化结构体中有的字段,如果json中有字段1,而在结构体中没有字段1,则反序列化就不会有字段1
var b = []byte(`{"Name1":"11111111","Name2":22,"Name3":98,"Name4":true,"Name5":3.14,"Name6":false}`)
//var b = []byte(`{"Name1":"test1","Name2":"test2","Name3":"test3"}`)
var t7 Test7Person1 e := json.Unmarshal(b,&t7) if e != nil {
fmt.Println(e)
}else {
fmt.Println(t7)
//{11111111 22 98 true 3.14}
} //反序列化到接口
var i interface{} e1 := json.Unmarshal(b,&i) if e1 != nil {
fmt.Println(e)
}else {
fmt.Println(i)
//map[Name1:11111111 Name2:22 Name3:98 Name4:true Name5:3.14 Name6:false]
} }
go语言的json的更多相关文章
- 使用Go语言访问JSON数据(gojsonq)
使用Go语言访问JSON数据(gojsonq) 主要是使用第三方的库 gojsonq,来查询JSON数据 例如这样的JSON数据 { "name":"computers& ...
- 国家以及国家语言的json数据格式,提供给网友参考。
目前接触到一个需求,需要全球主要国家的选择以及语言的选择,如下图: 这是国家选项 这是语言的选项: 很简单有木有? 本来打算直接给文件,但是好像没有文件上传,所以就提供一个思路和代码,你们照着弄吧. ...
- VBA中使用JavaScript脚本语言解析JSON数据
JSON:JavaScript 对象表示法(JavaScript Object Notation) 和xml相似,都是文本形式(保存在文本文件中或字符串等形式),比如: jsstr = {" ...
- 轻量级的数据交换语言(JSON)
游戏开发过程中,很多用到JSON的地方:客户端与服务端的网络通信,程序读取客户端的数值表之类的. JSON用于描述数据结构,有以下形式存在. 对象(object):一个对象以“{”开始,并以“}”结束 ...
- C语言:json库使用学习
Json基础 一.Json的概念 Json(Javascript Object Notation)全称为JavaScript对象表示法,是一种轻量级的数据交换格式,采用完全独立于语言的文本格式.JSO ...
- JSON的简单介绍以及C语言的JSON库使用
JSON概述 JSON: JavaScript 对象表示法( JavaScript Object Notation) .是一种轻量级的数据交换格式. 它基于ECMAScript的一个子集. JSON采 ...
- C语言处理json字符串
JSON语法说明 先来看一个简单的JSON 1 { 2 "stars": [ 3 { 4 "name": "Faye", 5 "a ...
- 易语言 史诗级Json处理 烁_Json模块!!!!
大家好,我是键盘上的魔手 * “************************”* “** 欢迎使用烁Json模块 **”* “** 作者:键盘上的魔手 **”* “** 微信号:codervip ...
- C语言解析json类型数据
转自:http://buluzhai.iteye.com/blog/845404 首先感谢作者!! 我使用的是cJSON:http://sourceforge.net/projects/cjson ...
- [日常] Go语言圣经--JSON习题2
练习 4.12: 流行的web漫画服务xkcd也提供了JSON接口.例如,一个 https://xkcd.com/571/info.0.json 请求将返回一个很多人喜爱的571编号的详细描述. 下载 ...
随机推荐
- Web基础了解版02-JavaScript
JavaScript 特性 ① 解释型语言.JavaScript是一种解释型的脚本语言,JavaScript是在程序的运行过程中逐行进行解释,不需要被编译为机器码再执行. ② 面向对象.JavaScr ...
- 你不会还在用这8个错误的SQL写法吧?
1.LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如对于下面简单的语句,一般 DBA 想到的办法是在 type, name, create_time 字段上加组合索引 ...
- drf源码分析系列---版本控制
版本的使用 第一步:写路由url(r'^api/(P<version>\w+)/user/$',views.UserView.as_view()), 第二步:写模块导入from rest_ ...
- 【Java】在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整 ...
- Java中接口和抽象类的区别?
抽象类 抽象类必须用 abstract 修饰,子类必须实现抽象类中的抽象方法,如果有未实现的,那么子类也必须用 abstract 修饰.抽象类默认的权限修饰符为 public,可以定义为 public ...
- 聊聊 Python 的内置电池
本文原创并首发于公众号[Python猫],未经授权,请勿转载. 原文地址:https://mp.weixin.qq.com/s/XzCqoCvcpFJt4A-E4WMqaA (一) 最近,我突然想到一 ...
- EF Core 基础知识
数据库连接字符串 在 ASP.NET Core 添加配置片段: { "ConnectionStrings": { "BloggingDatabase": &qu ...
- Python基础-day02-1
判断(if)语句 目标 开发中的应用场景 if 语句体验 if 语句进阶 综合应用 01. 开发中的应用场景 生活中的判断几乎是无所不在的,我们每天都在做各种各样的选择,如果这样?如果那样?-- 程序 ...
- VS2017 无法修改代码编辑区的项背景颜色问题
以前都是好好的,安装 ClaudiaIDE: https://github.com/buchizo/ClaudiaIDE 之后也没啥问题,用着用着代码编辑区自定义的颜色就没有了,好几台电脑都是这样, ...
- 新人踩坑的一天——springboot注入mapper时出现java.lang.NullPointerException: null
来公司的第二周接到了定时任务的开发需求:每天早上十点发送用户报表邮件 .校招新人菜鸟没做过这玩意有些懵(尴尬)于是决定分步写,从excel导出->邮件发送->定时器实现->mappe ...