将结构存储为redis中的字符串

时间:2015-05-15 10:58:54

标签: json string struct go

由于Redis只存储字符串,我想知道如何使用Go将Javascript的JSON.stringify转换为字符串。

我尝试过类型转换:

string(the_struct)

但这会导致错误。

1 个答案:

答案 0 :(得分:0)

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包(使用反射)将无法读/写它们。

您还可以为struct字段指定标记,以控制/微调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接口,您可以完全自定义编组/解组过程。

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