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

标签 json string struct go

由于 Redis 仅存储字符串,我想知道如何使用 Go 将 Struct 转换为字符串,从而实现与 Javascript 的 JSON.stringify 等效的功能。

我尝试过类型转换:

string(the_struct)

但这会导致错误。

最佳答案

encoding/json包可用于轻松地将 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.Marshalerjson.Unmarshaler您可以完全自定义编码/解码过程的接口(interface)。

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

关于json - 在redis中将结构存储为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30257817/

相关文章:

javascript - 提取字符串 JavaScript 的非常具体的部分

arrays - Julia - 许多分配以浏览结构中的数组

ajax - Facebook 聊天如何避免连续轮询服务器?

json - 在golang中的json unmarshal上获取可为空的对象

json - 如何在swift中将json解析为struct

java - 尝试做一个公共(public)方法

c - 你如何用 C 语言解释这个类似函数的宏 `slice` 的输出?

android - 将数据写入本地 JSON 文件

c - 如何修复这些无效的参数类型(链接列表/结构)并确保它们不会再次发生?

c - 在 C 中定义二维 char 数组