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中有用的片段