golang polymorph_json.go
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang polymorph_json.go相关的知识,希望对你有一定的参考价值。
package main
import (
"encoding/json"
"fmt"
)
// Int64Array в json может быть представлен и массивом и одним значением sic!
type Int64Array struct {
Values []int64
}
func (i Int64Array) MarshalJSON() ([]byte, error) {
if len(i.Values) == 1 {
return json.Marshal(i.Values[0])
}
return json.Marshal(i.Values)
}
func (i *Int64Array) UnmarshalJSON(b []byte) error {
if len(b) > 0 && b[0] == '[' {
values := []int64{}
err := json.Unmarshal(b, &values)
if err != nil {
return err
}
i.Values = values
} else {
var value int64 = 0
err := json.Unmarshal(b, &value)
if err != nil {
return err
}
i.Values = append(i.Values, value)
}
return nil
}
type Wrapper struct {
Code Int64Array "json:`code`"
}
func main() {
singleJSON := `{"code":34}`
res := &Wrapper{}
json.Unmarshal([]byte(singleJSON), res)
fmt.Printf("Single value: %v\n", res.Code.Values)
multiJSON := `{"code":[1,2,3]}`
res = &Wrapper{}
json.Unmarshal([]byte(multiJSON), res)
fmt.Printf("Multi value: %v\n", res.Code.Values)
}
Golang 学习之路
Golang基础
Golang基础之包概念
Golang基础之数据类型
Golang基础之流程控制
Golang基础之数组
Golang基础之切片
Golang基础之map
Golang基础之函数
Golang基础之指针
Golang基础之结构体
Golang基础之接口
Golang Web开发
Golang 其它
算法
以上是关于golang polymorph_json.go的主要内容,如果未能解决你的问题,请参考以下文章
Golang 入门
Golang入门到项目实战 第一个golang应用
golang编译androidso无法加载
golang如何打印内存内容
Golang入门到项目实战 golang匿名函数
json [Golang] golang #golang #snippets中有用的片段