当我try 将[]字节编组为JSON格式时,我只得到了一个奇怪的字符串.

请查看以下代码.

我有两个疑问:

如何将[]字节编组为JSON?

为什么[]字节会变成这个字符串?

package main

import (
    "encoding/json"
    "fmt"
    "os"
)

func main() {
    type ColorGroup struct {
        ByteSlice    []byte
        SingleByte   byte
        IntSlice     []int
    }
    group := ColorGroup{
        ByteSlice:  []byte{0,0,0,1,2,3},
        SingleByte: 10,
        IntSlice:   []int{0,0,0,1,2,3},
    }
    b, err := json.Marshal(group)
    if err != nil {
        fmt.Println("error:", err)
    }
    os.Stdout.Write(b)
}

输出为:

{"ByteSlice":"AAAAAQID","SingleByte":10,"IntSlice":[0,0,0,1,2,3]}

golang playground :https://play.golang.org/p/wanppBGzNR

推荐答案

根据文件:https://golang.org/pkg/encoding/json/#Marshal

数组和切片值编码为JSON数组,除了[]字节编码为base64编码字符串,而nil切片编码为空JSON对象.

AAAAAQID是字节片的base64表示形式-例如

b, err := base64.StdEncoding.DecodeString("AAAAAQID")
if err != nil {
    log.Fatal(err)
}

fmt.Printf("%v", b)
// Outputs: [0 0 0 1 2 3]

Go相关问答推荐

在连接表中以添加字段作为主要关键字的多对多

GORM没有从 struct 创建完整的表,如何修复?

如何描述OpenAPI规范中围棋的数据类型.JSON?

带有条件的for循环中缺少RETURN语句

为什么没有正确生成这些元组?

Go中的Slice[:1][0]与Slice[0]

如何用';贪婪原则';正确地

使用GOTK3和librsvg在Go中如何加载内联SVG?

Apache Beam 左加入 Go

如何为导入的嵌入式 struct 文字提供值?

Go gmail api 快速入门导致本地主机拒绝连接 ERR_CONNECTION_REFUSED

为什么 Go 被认为是部分抢占式的?

如何将多个切片打印为一个切片?

如何在Go中替换符号并使下一个字母大写

Go AST:获取所有 struct

curl:(56)Recv失败:连接由golang中的对等方与docker重置

Golang - 无法从 pipped Windows 命令中获取结果

跟踪长时间运行的任务的进度 - 正确的方法

Go Fyne 禁用 HSplit 调整大小?

出于某种原因,Golang (Go) AES CBC 密文被填充了 16 个 0x00 字节