栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

【Go常见错误】6. JSON错误之Marshal后为空(1)

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Go常见错误】6. JSON错误之Marshal后为空(1)

概述

在使用json的时候,常见的一个错误,就是结构体在Marshal后输出为空。

案例

首先定义一个point结构体:

type point struct {
  x float32
  y float32
}

然后创建一个point实例,并使用标准的json.Marshal函数把该实例编码成一个JSON输出:

p := point{3.0, 2.5}
b, err := json.Marshal(p) //①
if err != nil {
  return err
}
fmt.Println(string(b)) //②

① Marshal p

② b是一个[]byte变量,我们需要把它转换成可读的字符创。

不幸的的,上面的输出是空:

{}

可能原因

1.是因为结构体中没有设置JSON的标签吗?

type point struct {
  x float32 `json:"x"` //①
  y float32 `json:"y"` //②
}

2.是因为该结构体不是公有的吗?

type Point struct {
  x float32
  y float32
}

3.是因为该结构体内部的字段不是公有的吗?

type point struct {
  X float32
  Y float32
}

分别测试一下:

1和2还是输出空 {}

只有3输出了

{"x": 3, "Y": 2.5}

因此,要进行marshaled/unmarshaled,结构体的字段必须被导出(定义为公有)。

拓展

在Marshal时,如果我们想忽略一些字段该怎么办呢?

有两种方法:

1、不导出这些字段,即让字段名的首字母小写;

2、使用JSON标签。即使用 “-” ;

type Foo struct {
  A string
  b string //方法1
  C string `json:"-"` //方法2
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/991498.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号