【发布时间】:2018-09-07 13:48:47
【问题描述】:
例子:
package main
import (
"encoding/json"
"fmt"
"github.com/imdario/mergo"
)
func main() {
var DATA []map[string]interface{}
text := []byte(`[{"id":1,"test":1},{"id":2},{"id":3,"test":3},{"test":8}]`)
err := json.Unmarshal(text, &DATA)
if err != nil {
fmt.Errorf("ERR: %s", err)
}
var STATE map[string]interface{}
var newState []interface{}
fmt.Println("DATA: ", DATA)
for _, k := range DATA {
if err := mergo.Merge(&STATE, k, mergo.WithOverride); err != nil {
fmt.Errorf("Error merge new and old packets: %s", err)
}
fmt.Println("STATE: ", STATE)
newState = append(newState, STATE)
}
fmt.Println(newState)
}
我得到:[map[id:3 test:8] map[test:8 id:3] map[id:3 test:8] map[test:8 id:3]]
我想得到 [map[id:1 test:1] map[test:2 id:1] map[id:3 test:3] map[test:8 id:3]]
我不明白为什么最后一个值落入数据片中,而不是在撰写本文时
【问题讨论】:
-
地图是无序的。所以没有办法保证你会得到你想要的。
-
我不明白你想在这里实现什么。预期的输出与输入完全相同,那么为什么不只是
fmt.Println(DATA)? -
@Peter 我更新了示例
标签: go