[英]Different names of JSON property during serialization and deserialization in golang
[英]Golang JSON Serialization/Deserialization
我有一個結構如下:
type Node struct {
Name string
Children []*Node
Values []string
}
我也有一組描述我的樹的json文件,例如:
{
"something": {
"someblah": [
"fluf",
"glah"
],
"someother": {
"someotter": [
"blib",
"fnar"
]
}
}
}
如何將這些文件反序列化為結構?
我發現的所有示例似乎都需要帶有命名鍵/值對的不同結構。
為此,結構是關鍵:
我不明白如何將此邏輯映射到golang json序列化程序中。
最簡單的方法是解碼為map [string] interface {}並將其轉換為所需的結構:
var m map[string]interface{}
err := json.Unmarshal(data, &m)
if err != nil {
// handle error
}
node := convert(m, "")
...
func convert(name string, m map[string]interface{}) *Node {
n := Node{Name: name}
for k, v := range m {
switch v := v.(type) {
case []interface{}:
nn := Node{Name: k}
for _, e := range v {
s, ok := e.(string)
if !ok {
panic(fmt.Sprintf("expected string, got %T", e))
}
nn.Values = append(nn.Values, s)
}
n.Children = append(n.Children, &nn)
case map[string]interface{}:
n.Children = append(n.Children, convert(k, v))
default:
panic("unexpected type")
}
}
return &n
}
當convert
函數遇到意外類型的值時,它將驚慌。 根據您的應用程序的要求,您可能要忽略這些值或返回錯誤。
在操場上跑 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.