go 和 json ------ 对官方博客的一种翻译

栏目: Go · 发布时间: 4年前

介绍: json 是一种常见的数据交互模式, 从语法来看, 他类似于javascript 的 对象和列表。 通常情况下, json 被用于在web 后端服务器和 运行在浏览器上的js 程序进行通信, 偶尔, 该数据结构也用被其他地方用于通信。 你可以使用json 包在你的 go 程序中非常简单的读写json. 编码: 编码json 数据可以使用 Marshal 函数 func Marshal(v interface{}) ([]byte, error) 下面给出go 数据结构: Message type Message struct { Name string Body string Time int64 } 和 Message 的实例: m m := Message{"Alice", "Hello", 1294706395881547000} 我们能够使用 json.Marshal 方法得到一个m实例的json 字符串([]byte) b, err := json.Marshal(m); 如果我们的语法正确, 则 err 变量的值为 nil, 且b 变量([]byte)中会保存json 数据 b == []byte(`{"Name":"Alice","Body":"Hello","Time":1294706395881547000}`) ps: go 中使用反引号或两个双引号来表示一个字符串, 两种方法略有分别, 可以搜索 'go 反引号 双引号 的相关博客' 以下是一些合法json 编码的规则 json 对象只支持使用字符串为key; 在编码 map 类型时, map 的形式应该为 map[string]T (T 是json 包中支持的变量类型) 管道类型、 复杂类型、 函数类型不能被编码为json 不支持循环结构, 这样会导致Marshal 函数死循环 json 包仅仅会访问结构体类型的导出字段(结构体成员变量已大写字母开头), 所以, 输出的json 串只会包含结构体的导出字段。 解码: 我们可以使用Unmarshal 函数解码json 数据 func Unmarshal(data []byte, v interface{}) error 我们必须提前创建好保存json 对象的数据结构 var m Message 然后, 调用 json.Unmarshal, 传入含有json 数据的b ([]byte) 和 m (Message)的指针 err := json.Unmarshal(b, &m); 如果 b 中的json 串合法, 则err 变量的值为 nil ; 同时, 会把b 中的数据存储在 m 中 , 这个过程类似于下面的赋值操作: m = Message{ Name: "Alice", Body: "Hello", Time: 1294706395881547000, } 现在, 我们来思考一个问题, Unmarshal 是如何将对应的值存入结构体相应的字段中呢? 举个栗子, Json 中有一个 key -- "Foo", Unmarshal 函数是如何找到结构体中对应的 Foo 成员并赋值的呢? Unmarshal 函数反序列化的规则如下: 找到一个导出字段的 tag 叫 "Foo" 的 找到一个 导出字段叫 "Foo" 的 按照忽略大小写匹配导出字段为 "Foo" 的 (例如 : FOO FoO FOo 都算) 因为涉及到匹配,那么, 如果json 串中的key 没有匹配 go 语言中的类型会怎么样呢? 比如说: b := []byte(`{"Name":''Bob", "Food":"Pickle"}`) var m Message err := json.Unmarshal(b, &m); 在上面的例子中, Unmarshal 函数会尽量将匹配的字段赋值。 也就是说 只有 Name 字段会被复制, Food 字段将会忽略掉。 以上是已知json 数据内容的情况, 这样可以自定义结构体, 如果json 结构体未知呢? 预知后事如何, 请听下回分解

入群交流(该群和以上内容无关):Go中文网 QQ交流群:731990104 或 加微信入微信群:274768166 备注:入群; 公众号:Go语言中文网


以上所述就是小编给大家介绍的《go 和 json ------ 对官方博客的一种翻译》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

金融计算与建模

金融计算与建模

朱世武 / 清华大学 / 2007-8 / 40.00元

《金融计算与建模:理论、算法与SAS程序》全书分为4大模块:1-9章为金融学基础指标计算模块;10-12章为股票定价模块;13-18章为风险度量模块;19-23章为固定收益定价模块。每一模块的内容一般由三部分组成:金融理论与模型、算法实现及计算程序。其中,算法实现与计算程序全部以中国金融市场的实际问题为应用背景而设计。《金融计算与建模:理论、算法与SAS程序》不仅展现了应用SAS软件的技术,同时也......一起来看看 《金融计算与建模》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具