专栏首页Golang开发Golang web基础——JSON

Golang web基础——JSON

使用json.Marshal()函数可以对一组数据进行JSON格式的编码。 json.Marshal()函数的声明如下:

    func Marshal(v interface{}) ([]byte, error)

还有一个格式化输出:

// MarshalIndent 很像 Marshal,只是用缩进对输出进行格式化
func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error)

我们首先定义了与json数据对应的结构体,数组对应slice,字段名对应JSON里面的KEY,在解析的时候,如何将json数据与struct字段相匹配呢?例如JSON的key是Foo,那么怎么找对应的字段呢? 首先查找tag含有Foo的可导出的struct字段(首字母大写) 其次查找字段名是Foo的导出字段 最后查找类似FOO或者FoO这样的除了首字母之外其他大小写不敏感的导出字段 聪明的你一定注意到了这一点:能够被赋值的字段必须是可导出字段(即首字母大写)。同时JSON解析的时候只会解析能找得到的字段,找不到的字段会被忽略,

type Student struct {
    Name string
    Age int
}
type Classes struct {
    St []Student `json:"students"`
}
func main() {
    var s Classes
    str := `{"students":[{"name":"foo","age":18},{"name":"bar","age":20}]}`
    err := json.Unmarshal([]byte(str), &s)
    fmt.Printf("json %v %v",s,err)
}
import (
    "fmt"
    "encoding/json"
)

type Student struct {
    Id int64 `json:"-"`
    Name string `json:"name,omitempty"`
    Age int `json:"age,string"`
}
type Classes struct {
    Students []Student `json:"students"`
}


func main() {
    var c Classes
    c.Students = append(c.Students, Student{Id :2000,Name: "stdu1", Age: 18})
    c.Students = append(c.Students, Student{Id :2001,Name: "stdu2", Age: 20})
    c.Students = append(c.Students, Student{Id :2001,Name: "", Age: 20})
    b, err := json.Marshal(c)
    if err != nil {
        fmt.Println("json err:", err)
    }
    fmt.Println(string(b))
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python——JSON

    json.loads 用于解码 JSON 数据,将Json格式字符串解码转换成Python对象

    羊羽shine
  • iOS持续集成(CI)——OCLint静态代码分析

    通过 -e 选项来忽略Cocoapods 来pod文件,通过--来分割 oclint-json-compilation-database 的参数与 oclint...

    羊羽shine
  • golang-101-hacks(10)——String

    注:本文是对golang-101-hacks中文翻译。 在Go中string是由不可变的字节数组构成的。一旦赋值,就不能修改字符串的值。例如 In Go, ...

    羊羽shine
  • SpringMVC底层数据传输校验的方案

    团队的项目正常运行了很久,但近期偶尔会出现BUG。目前观察到的有两种场景:一是大批量提交业务请求,二是生成批量导出文件。出错后,再执行一次就又正常了。

    程序猿讲故事
  • 快速API自动化测试

    我们平时写API,时效性太慢了。而且花费的成本代价太高。特别是有严重的滞后性。当平台多,业务多,迭代多的时候,接口自动化实现出来的时候,黄花菜都凉了。

    赵云龙龙
  • JSON的解析

    使用时主要会涉及到json格式的互转,有对象,数组,集合,map等等。即使会了过一过眼也是好的,加深印象。

    聚沙成塔
  • Python学习之利用Python处理J

    最近在研究利用zabbix的自动发现功能来监控一台服务器上的多个Redis端口。网上有篇文章写个Python程序来发现Redis端口并显示成JSON格式。这里就...

    py3study
  • json对象和json字符串的转化

    代码如下: JSON.parse(jsonstr); //可以将json字符串转换成json对象 JSON.stringify(jsonobj); //可以将j...

    用户5640963
  • js数组、json、js对象的区别与联系

    IT故事会
  • Python JSON 模块

    桑鱼

扫码关注云+社区

领取腾讯云代金券