我知道,Json不支持键的字符串以外的任何东西。
但是将整个map[int]int
转换为临时map[string]int
并不总是可行的,因为第二个不适合记忆。
有没有一种方法可以动态转换int键?
是否有类似json的格式与int键? YAML?一些二进制格式?
答案 0 :(得分:1)
不,你无法动态转换地图。您将需要拥有原始地图,直到您填充新地图(然后可以将其删除)。
你要问自己的第一个问题:你要用json做什么,因为现代电脑有很多内存,所以存储4gb也不会有问题(我非常怀疑你是否会发送4gb json请求)。
一旦你知道为什么要编码你的东西,你就可以寻找合适的格式。
例如,您可以序列化地图。
package main
import (
"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 stuff
fmt.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)
}
答案 1 :(得分:0)
在代码中进行编码。它很容易,并且可能会更快作为奖金。
这应该有效:
var buf bytes.Buffer
first := true
fmt.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())
。