我们希望一个JSON场重命名value,以v生产。在我们所有的用户都使用新的结构之前,我们将继续将旧的 JSON 结构加入我们的代码中。所以我们也想处理这个问题。
如果你注意到,First是原来的结构,Second是新的结构。为了处理这两种结构,我创建了一个MyStruct并基于version,我将其复制OldValue到Value
if m.Version <= 1 {
m.Value = m.OldValue
}
有没有更好的方法来处理这个问题,而不是我的代码。
package main
import "fmt"
import "encoding/json"
import "log"
type First struct {
Version int `json:"version"`
Value int `json:"value"`
}
type Second struct {
Version int `json:"version"`
Value int `json:"v"`
}
type MyStruct struct {
Version int `json:"version"`
OldValue int `json:"value"`
Value int `json:"v"`
}
func main() {
oldValue := []byte(`{"version":1, "value":5}`)
newValue := []byte(`{"version":2, "v":7}`)
var m MyStruct
err := json.Unmarshal(newValue, &m)
if err != nil {
log.Fatal(err)
}
fmt.Println("New Struct")
fmt.Println(m.Value)
err = json.Unmarshal(oldValue, &m)
if err != nil {
log.Fatal(err)
}
fmt.Println("Old Struct")
if m.Version <= 1 {
m.Value = m.OldValue
}
fmt.Println(m.Value)
}
慕沐林林
慕少森
相关分类