去:如何 json.Marshal map[int]int?

我知道,Json 不支持除键字符串之外的任何其他内容。

但是将整个转换map[int]int为临时map[string]int并不总是可能的,因为第二个不适合内存。

有没有一种方法可以即时转换 int 键?

是否有带有 int 键的类似 json 的格式?雅姆?某种二进制格式?


临摹微笑
浏览 204回答 2
2回答

喵喵时光机

不,您不能即时转换地图。在填充新地图之前,您需要拥有原始地图(然后可以将其删除)。你必须问自己的第一个问题:你打算用那个 json 做什么,因为现代计算机有很多 RAM,所以即使存储 4gb 也不成问题(我非常怀疑你会发送 4gb json 请求) .一旦你知道你为什么要编码你的东西,你就可以寻找合适的格式。例如,您可以序列化您的地图。package mainimport (    "fmt"    "encoding/gob"    "bytes")var m = map[int]string{1:"one", 2: "two", 3: "three"}func main() {    buf := new(bytes.Buffer)    encoder := gob.NewEncoder(buf)    err := encoder.Encode(m)    if err != nil {        panic(err)    }// your encoded stufffmt.Println(buf.Bytes())    var decodedMap map[int]string    decoder := gob.NewDecoder(buf)    err = decoder.Decode(&decodedMap)    if err != nil {        panic(err)    }    fmt.Printf("%#v\n", decodedMap)}

慕哥9229398

在代码中进行编码。这很容易,而且作为奖励可能会更快。这应该有效:var buf bytes.Bufferfirst := truefmt.Fprint(&buf, "{")for k, v := range m {    if first {        first = false    } else {        fmt.Fprint(&buf, ",")    }    fmt.Fprintf(&buf, `"%d":%d`, k, v)}fmt.Fprint(&buf, "}")如果您需要将此传递给encoding/json您可以使用json.RawMessage(buf.Bytes()).
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go