在redis中将结构存储为字符串
Store struct as string in redis
由于 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
包(使用反射)将无法 read/write 它们。
您还可以为结构字段指定标签以 control/fine 调整 json marshaling/unmarshaling 过程,例如更改 JSON 文本中的名称:
type Person struct {
Name string `json:"name"`
Age int `json:"years"`
}
通过此更改,上述应用程序的输出如下:
{"name":"Bob","years":23}
{Name:Bob Age:23}
json.Marshal()
函数的文档详细说明了标签提供的可能性。
并且通过实现 json.Marshaler
and json.Unmarshaler
接口,您可以完全自定义编组/解组过程。
此外,如果您的结构未预先定义(例如,您事先不知道字段),则可以使用 map[string]interface{}
。 .
由于 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
包(使用反射)将无法 read/write 它们。
您还可以为结构字段指定标签以 control/fine 调整 json marshaling/unmarshaling 过程,例如更改 JSON 文本中的名称:
type Person struct {
Name string `json:"name"`
Age int `json:"years"`
}
通过此更改,上述应用程序的输出如下:
{"name":"Bob","years":23}
{Name:Bob Age:23}
json.Marshal()
函数的文档详细说明了标签提供的可能性。
并且通过实现 json.Marshaler
and json.Unmarshaler
接口,您可以完全自定义编组/解组过程。
此外,如果您的结构未预先定义(例如,您事先不知道字段),则可以使用 map[string]interface{}
。