为了账号安全,请及时绑定邮箱和手机立即绑定

在redis中将结构体存储为字符串

在redis中将结构体存储为字符串

Go
德玛西亚99 2021-10-04 18:10:46
由于 Redis 仅存储字符串,我想知道如何使用 Go 将 Struct 转换为字符串,从而完成与 Javascript 的 JSON.stringify 等效的操作。我试过类型转换:string(the_struct)但这会导致错误。
查看完整描述

1 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

该encoding/json包可用于轻松地将 a 转换struct为 JSON 字符串,反之亦然(将 JSON 字符串解析为struct)。


简单示例(在Go Playground上尝试):


type Person struct {

    Name string

    Age  int

}


func main() {

    p := Person{"Bob", 23}


    // Struct -> JSON

    data, err := json.Marshal(&p)

    if err != nil {

        panic(err)

    }

    fmt.Println(string(data))


    // JSON -> JSON

    var p2 Person

    err = json.Unmarshal(data, &p2)

    if err != nil {

        panic(err)

    }

    fmt.Printf("%+v", p2)

}

输出:


{"Name":"Bob","Age":23}

{Name:Bob Age:23}

笔记:

的字段struct必须导出(以大写字母开头),否则json包(使用反射)将无法读取/写入它们。


您还可以为结构字段指定标签以控制/微调 json 编组/解组过程,例如更改 JSON 文本中的名称:


type Person struct {

    Name string `json:"name"`

    Age  int    `json:"years"`

}

通过此更改,上述应用程序的输出如下:


{"name":"Bob","years":23}

{Name:Bob Age:23}

该json.Marshal()函数的文档详细说明了标签提供的可能性。


通过实现json.Marshaler和json.Unmarshaler接口,您可以完全自定义编组/解组过程。


此外,如果您的结构不是预定义的(例如,您事先不知道字段),您可以使用map[string]interface{}. 


查看完整回答
反对 回复 2021-10-04
  • 1 回答
  • 0 关注
  • 254 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信