栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Go中将字节/ uint8数组封送为json数组?

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

如何在Go中将字节/ uint8数组封送为json数组?

根据文档,a

[]byte
将被编码为base64字符串。

“数组和切片值编码为JSON数组, 除了[] byte编码为base64编码的字符串 ,而nil slice编码为空JSON对象。”

因此,我认为您可能需要通过实现自己的方法来使struct实现Marshaler接口,

MarshalJSON
该方法将使您的JSON数组编码更为理想
[]uint8

举个例子:

import "fmt"import "encoding/json"import "strings"type Test struct {    Name  string    Array []uint8}func (t *Test) MarshalJSON() ([]byte, error) {    var array string    if t.Array == nil {        array = "null"    } else {        array = strings.Join(strings.Fields(fmt.Sprintf("%d", t.Array)), ",")    }    jsonResult := fmt.Sprintf(`{"Name":%q,"Array":%s}`, t.Name, array)    return []byte(jsonResult), nil}func main() {    t := &Test{"Go", []uint8{'h', 'e', 'l', 'l', 'o'}}    m, err := json.Marshal(t)    if err != nil {        fmt.Println(err)    }    fmt.Printf("%s", m) // {"Name":"Go","Array":[104,101,108,108,111]}}

http://play.golang.org/p/Tip59Z9gqs


也许更好的主意是创建一个具有

[]uint8
其基础类型的新类型,将该类型设为a
Marshaler
,并在您的结构中使用该类型。

import "fmt"import "encoding/json"import "strings"type JSonableSlice []uint8func (u JSONableSlice) MarshalJSON() ([]byte, error) {    var result string    if u == nil {        result = "null"    } else {        result = strings.Join(strings.Fields(fmt.Sprintf("%d", u)), ",")    }    return []byte(result), nil}type Test struct {    Name  string    Array JSONableSlice}func main() {    t := &Test{"Go", []uint8{'h', 'e', 'l', 'l', 'o'}}    m, err := json.Marshal(t)    if err != nil {        fmt.Println(err)    }    fmt.Printf("%s", m) // {"Name":"Go","Array":[104,101,108,108,111]}}

http://play.golang.org/p/6aURXw8P5d



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

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

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