golang:json 反序列化的[]和nil操作

作者:天已青色等烟雨来 时间:2024-04-26 17:19:24 

我就废话不多说了,大家还是直接看代码吧~


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后,值为[]。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持asp之家。如有错误或未考虑完全的地方,望不吝赐教。

来源:https://blog.csdn.net/x356982611/article/details/86015295

标签:golang,json,反序列化
0
投稿

猜你喜欢

  • Python3模拟登录操作实例分析

    2022-01-18 13:36:26
  • PHP中单引号和双引号的区别详解

    2023-05-25 08:16:51
  • Sql Server 2012 分页方法分析(offset and fetch)

    2012-10-07 10:51:04
  • python多进程程序打包成exe的问题

    2023-08-07 13:39:03
  • Python实现的三层BP神经网络算法示例

    2021-05-16 19:21:05
  • 使用python将请求的requests headers参数格式化方法

    2021-06-12 07:22:49
  • Python中暂存上传图片的方法

    2022-04-05 20:53:08
  • Python实现抓取HTML网页并以PDF文件形式保存的方法

    2022-12-15 22:56:30
  • 仿豆瓣分页原型(Javascript版)

    2007-11-05 14:04:00
  • python读取hdfs并返回dataframe教程

    2022-03-22 17:15:33
  • JavaScript遍历求解数独问题的主要思路小结

    2023-10-13 16:41:14
  • python自动保存百度盘资源到百度盘中的实例代码

    2023-12-18 07:05:01
  • Python中处理字符串之endswith()方法的使用简介

    2023-02-25 09:05:36
  • Go语言实现的可读性更高的并发神库详解

    2023-07-20 08:03:49
  • php下载远程大文件(获取远程文件大小)的实例

    2024-05-03 15:29:47
  • 往MySQL中存储图片的方法

    2024-01-17 15:57:49
  • Pandas数据分析之pandas数据透视表和交叉表

    2021-01-18 05:43:45
  • 如何取得刚添加的记录自动增加的ID?

    2010-01-18 20:55:00
  • python原始套接字编程示例分享

    2021-10-09 19:00:07
  • vue使用v-for实现hover点击效果

    2024-05-02 17:09:03
  • asp之家 网络编程 m.aspxhome.com