golang:json 反序列化的[]和nil操作
我就废话不多说了,大家还是直接看代码吧~
package main import ( "encoding/json" "log" ) type JS struct { A []string } func main() { v1 := &JS{} v2 := &JS{A: []string{}} o1, err := json.Marshal(&v1) log.Println(string(o1), err) o2, err2 := json.Marshal(&v2) log.Println(string(o2), err2) }
结果
2019/01/07 18:13:26 {"A":null} <nil>
2019/01/07 18:13:26 {"A":[]} <nil>
补充:go语言中 json转换--nil
go语言中如果一个变量的值为nil,是否能否为json?
如果能否转换,转换后的结果是什么?
下面直接看下例子。
package main import ( "encoding/json" "fmt" ) func main() { marshalTest() } func marshalTest() { b, err := json.Marshal(nil) if err != nil { fmt.Println("json.Marshal failed:", err) return } fmt.Println("result:", string(b)) }
output:
result: null
结果输出为"null"。
也就是说,凡是值为nil的变量,经过json编码后都是"null"。例如,未赋值的指针变量、切片slice等:
var ptr *int
var s []int
反过来,如果一个json字符串是"null",经过解析后,转换后的值是什么样呢?
例如,转换为结构体,转换后为结构体变量的默认值。
package main import ( "encoding/json" "fmt" ) func main() { unmarshalTest() } type Apple struct { Size int Addr string Num *int } func unmarshalTest() { value := []byte("null") a := Apple{} if err := json.Unmarshal(value, &a); err != nil { fmt.Println("json.Unmarshal failed:", err) return } fmt.Printf("result:%+v\n", a) }
output:
result:{Size:0 Addr: Num:<nil>}
如果"null"作为json字符串,转换为slice后,值为[]。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。
相关推荐
-
Go语言获取系统性能数据gopsutil库的操作
psutil是一个跨平台进程和系统监控的Python库,而gopsutil是其Go语言版本的实现.本文介绍了它的基本使用. Go语言部署简单.性能好的特点非常适合做一些诸如采集系统信息和监控的服务,本文介绍的gopsutil库是知名Python库:psutil的一个Go语言版本的实现. 一.安装 go get github.com/shirou/gopsutil 二.使用 2.1 CPU 采集CPU相关信息. import "github.com/shirou/gopsutil/cpu"
-
golang获取网卡信息操作
我就废话不多说了,大家还是直接看代码吧~ package main import ( "fmt" "os/exec" "strings" "github.com/safchain/ethtool" ) func main() { baseNicPath := "/sys/class/net/" cmd := exec.Command("ls", baseNicPath) buf, err
-
解决Golang json序列化字符串时多了\的情况
我们在对外提供API接口,返回响应的时候,很多时候需要使用如下的数据结构 type Response struct { Code int `json:"code"` Msg string `json:"msg"` Data interface{} `json:"data"` } 该API接口返回一个状体码,状态信息,以及具体的值.但是具体的值可能根据各个接口的不同而不同. 在实际的开发过程中我们可能会得到一个实际的数据值,并将这个值赋值给data
-
详解mongodb搭建Replica Set的方法
1.创建数据文件夹: mkdir -p /data/master mkdir -p /data/slaver mkdir -p /data/arbiter 效果: data 文件夹包含 arbiter master slaver 三个文件夹 2.创建日志存放文件 vi /log/master.log vi /log/slaver.log vi /log/arbiter.log 效果: log文件夹包含 master.log slaver.log arbiter.log 三个文件(注意,
-
go语言 bool类型的使用操作
我就废话不多说了,大家还是直接看代码吧~ // 1 声明类型,没有初始化,零值(false) var a bool a = true fmt.Println("a = ", a) // 2 自动推导类型 var b = false fmt.Println("b = ", b) c := false fmt.Println("c = ", c) 补充:Go语言基础:变量,常量,Boolean,字符串,iota枚举 定义变量 格式:var 变量名 变
-
golang判断net.Conn 是否已关闭的操作
在多线程的线程里边,用一个线程处理一条连接,如何判断连接已经关闭? 试了一下,如果连接中断,读写会出现这种net.OpError,这个就可以判断是否断开 但是我也不确定有没有更好的方法?如果有的话,希望朋友们不吝赐教 func dealConn(conn net.Conn){ //defer conn.Close() //defer conn.Flush() //长连接里边的读写操作必须放到循环里面这样才能进行多次的读写 // 如果连接已经断开,就把这个线程中断掉,怎么判断这个连接已经断开? t
-
golang:json 反序列化的[]和nil操作
我就废话不多说了,大家还是直接看代码吧~ package main import ( "encoding/json" "log" ) type JS struct { A []string } func main() { v1 := &JS{} v2 := &JS{A: []string{}} o1, err := json.Marshal(&v1) log.Println(string(o1), err) o2, err2 := json.
-
Swift 中的 JSON 反序列化示例详解
目录 业界常用的几种方案 手动解码方案,如 Unbox(DEPRECATED) 阿里开源的 HandyJSON 基于 Sourcery 的元编程方案 Swift build-in API Codable 属性装饰器,如 BetterCodable 各个方案优缺点对比 Codable 介绍 原理浅析 Decoder.Container 协议 自研方案 功能设计 Decoder.Container 具体实现 再议 PropertyWrapper 应用场景示例 单元测试 性能对比 业界常用的几种方案
-
实例解析Json反序列化之ObjectMapper(自定义实现反序列化方法)
对于服务器端开发人员而言,调用第三方接口获取数据,将其"代理"转化并返给客户端几乎是家常便饭的事儿. 一般情况下,第三方接口返回的数据类型是json格式,而服务器开发人员则需将json格式的数据转换成对象,继而对其进行处理并封装,以返回给客户端. 在不是特别考虑效率的情况下(对于搜索.缓存等情形可以考虑使用thrift和protobuffer),通常我们会选取jackson包中的ObjectMapper类对json串反序列化以得到相应对象.通常会选取readValue(Strin
-
golang json性能分析详解
前言 众所周知Json 作为一种重要的数据格式,具有良好的可读性以及自描述性,广泛地应用在各种数据传输场景中.Go 语言里面原生支持了这种数据格式的序列化以及反序列化,内部使用反射机制实现,性能有点差,在高度依赖 json 解析的应用里,往往会成为性能瓶颈,好在已有很多第三方库帮我们解决了这个问题,但是这么多库,对于像我这种有选择困难症的人来说,到底要怎么选择呢,下面就给大家来一一分析一下 ffjson go get -u github.com/pquerna/ffjson 原生的库性能比较差的
-
golang json.Marshal 特殊html字符被转义的解决方法
go语言提供了json的编解码包,json字符串作为参数值传输时发现,json.Marshal生成json特殊字符<.>.&会被转义. type Test struct { Content string } func main() { t := new(Test) t.Content = "http://www.baidu.com?id=123&test=1" jsonByte, _ := json.Marshal(t) fmt.Println(string
-
golang开发安装go-torch火焰图操作步骤
目录 安装 使用 另一种自定义显示方式 代码修改 使用 查看 安装 1. 安装go-torch go get github.com/uber/go-torch 2.安装FlameGraph cd $GOPATH && git clone https://github.com/brendangregg/FlameGraph.git export PATH=$PATH:$GOPATH/FlameGraph [这步一定要设置,生成火焰图时会用到] 3.安装graphviz (CentOS, R
-
Go json反序列化“null“的问题解决
目录 实验 其他测试 有这么一段代码,可以先看一下有没有什么问题,作用是输入一段json字符串,反序列化成map,然后将另一个inputMap的内容,merge进这个map func mergeContent(inputJson string, inputMap map[string]interface{}) (map[string]interface{}, error) { jsonMap := make(map[string]interface{}) if inputJson != "&qu
-
golang针对map的判断,删除操作示例
本文实例讲述了golang针对map的判断,删除操作.分享给大家供大家参考,具体如下: map是一种key-value的关系,一般都会使用make来初始化内存,有助于减少后续新增操作的内存分配次数.假如一开始定义了话,但没有用make来初始化,会报错的. 复制代码 代码如下: package main import ( "fmt" ) func main(){ var test = map[string]string{"姓名":"李四",&qu
-
Python json模块dumps、loads操作示例
本文实例讲述了Python json模块dumps.loads操作.分享给大家供大家参考,具体如下: python中json数据的使用. dumps和loads也是需要成对使用的,就像c++ new/delete malloc/free一样需要成对使用. 看着像json的字符串,也不一定是json字符串.哈哈. 具体看例子吧. # -*- coding:utf-8 -*- #! python2 import json data = {"name":"张三", &qu
-
C#中Json反序列化的实现方法
前言 Json反序列化有两种方式[本人],一种是生成实体的,方便处理大量数据,复杂度稍高,一种是用匿名类写,方便读取数据,较为简单. 使用了Newtonsoft.Json,可以自行在nuget中导入 Json源数据: var data = "{'jingdong_ldop_receive_trace_get_responce':{'code':'0','querytrace_result':{'data':[{'opeTitle':'快递签收','opeRemark':'货物已交付京东物流','
随机推荐
- JavaScript新增样式规则(推荐)
- win2008 r2中IIS7.5及以上设置404错误页面的正确方法
- junit4教程junit4.5官方下载
- java 设计模式之State(状态模式)
- IOS 通讯录信息读取兼容的实现方法
- Windows Server 2012 R2 Hyper-V虚拟化常见异常处理方法总结
- Markdown+Bootstrap图片自适应属性详解
- php用header函数实现301跳转代码实例
- jsp中利用jquery+ajax在前后台之间传递json格式参数
- C#中创建PDF网格并插入图片的方法
- 通过MySQL优化Discuz!的热帖翻页的技巧
- mysql4.0升级到mysql5(4.1),解决字符集问题
- C3P0连接池+MySQL的配置及wait_timeout问题的解决方法
- Android播放音乐案例分享
- php实现图片文件与下载文件防盗链的方法
- redis2.8配置文件中文翻译版
- Nginx服务器搭建和基本配置详解
- Qt定时器和随机数详解
- 跨站脚本执行漏洞详解与防护
- javascript asp教程 日期相关