当前位置: 首页 > 面试题库 >

将JSON [] byte封送为Go中的字符串

慎芷阳
2023-03-14
问题内容

我有一个结构,其中包含要编码为JSON的字符串作为[] byte字段。但是,生成的JSON包含切片内容的非预期字符串表示形式。这是我所引用的示例:

package main

import (
    "fmt"
    "encoding/json"
    )

type Msg struct {
    Content []byte
}

func main() {
    helloStr := "Hello"
    helloSlc := []byte(helloStr)
    fmt.Println(helloStr, helloSlc)

    obj := Msg{helloSlc}
    json, _ := json.Marshal(obj)
    fmt.Println(string(json))
}

这将产生以下输出:

Hello [72 101 108 108 111]
{"Content":"SGVsbG8="}

json.Marshal()方法对[]
byte编码的字符串执行哪种转换。如何生成带有字符串{“ Content”:“ Hello”}的原始内容的JSON?


问题答案:

将A
[]byte编组为base64编码的字符串。从文档中:

数组和切片值编码为JSON数组,但将其[]byte编码为base64编码的字符串,而将nil slice编码为空JSON对象。

取消编组时,这些值将正确解码。

这样做的原因是JSON没有原始字节的本地表示。



 类似资料:
  • 问题内容: 我的成员有一个结构,我正在用编写它。麻烦的是,它将s解释为s,并且它输出字符串而不是数字数组。 如果它是,我可以使它工作,但是如果可以避免的话,我不想分配和复制这些项目。我可以吗? 问题答案: 根据文档,a 将被编码为Base64字符串。 “数组和切片值编码为JSON数组, 除了[] byte编码为base64编码的字符串 ,而nil slice编码为空JSON对象。” 因此,我认为您

  • 问题内容: 我有一个大小字节数组,做完之后。 我得到错误: 无法将b(类型[16] byte)转换为字符串类型 问题答案: 您可以将其称为切片:

  • 问题内容: 我有一个大小字节数组,做完之后。 错误: 我找到解决这个问题的方法 改成: 但是为什么不能这样使用它呢? 问题答案: 简短的答案是因为Go语言规范不允许这样做。 引用Go语言规范:转换: 在以下任何一种情况下,可以将非恒定值转换为类型: 可分配给。 的类型,并且具有相同的基础类型。 的类型和是未命名的指针类型,它们的指针基类型具有相同的基础类型。 x的类型均为整数或浮点类型。 x的类型

  • 我的问题非常类似于当字符串为空但不为null时如何防止在JAXB中编组空标记 区别在于我无法将注释添加到包信息。java作为我们所有的JAXB类型都是从每个构建的模式中生成的。如果可能的话,我也不希望更改JAXB提供程序。 我想要实现的是,设置空字符串不会创建元素,但我需要为许多模式中生成的所有JAXB类型设置此值。有没有办法将其应用于所有生成的JAXB类中的所有字符串字段? 更新我已通过以下更改

  • 我有一个这样的结构: 但是,即使MyStruct的实例完全为空(也就是说,所有值都是默认值),它也被序列化为: 我知道编码/json文档指定“空”字段是: false、0、任何nil指针或接口值,以及任何长度为零的数组、切片、映射或字符串 但不考虑所有空/默认值的结构。它的所有字段也用标记,但这没有效果。 如何让JSON包不封送我的空结构字段?

  • 问题内容: 和Go 之间有什么区别? 什么时候使用“他”或“她”? 为什么? 你好 输出是,而缺少,有时我觉得很奇怪。 问题答案: 并且是不同的类型,但是它们可以相互转换: 3。将一个字节的切片转换为字符串类型会产生一个字符串,其连续字节是该切片的元素。 4。将字符串类型的值转换为字节片的类型会产生一个片,其连续元素是字符串的字节。 博客:数组,切片(和字符串):’append’的机制: 字符串实