我封送map[string]interface{}
,并得到一个JSON:
{
"test": {
"test2": 123
}
}
在interface{}
在某些情况下,我有另一个map[string]interface{}
有什么办法元帅它和逃避双引号来得到这样的JSON?
{
"test": "{
\"test2\": 123
}"
}
(假设你不关心你的期望输出换行符) - 要做到这一点是通过每个地图中的价值循环的一种方式,而这些封成一个JSON字符串首先,使用标准json.Marshal
功能。然后添加这些字符串返回到原来的地图(或新地图,如果你喜欢)。现在,你有一个地图,该值实际上都是原始值的JSON字符串表示,可以名帅这个外部映射为JSON和编码器将难逃在值字符串的所有双引号为您服务。看到这个例子
package main
import (
"fmt"
"encoding/json"
)
var yourMap = map[string]interface{}{
"a": 1,
"b": map[string]interface{}{
"c": 2,
},
}
func transform(m map[string]interface{}) (map[string]interface{}, error) {
newMap := make(map[string]interface{})
for k, v := range m {
bytez, err := json.Marshal(v)
if err != nil {
return nil, err
}
newMap[k] = string(bytez)
}
return newMap, nil
}
func main() {
newMap, err := transform(yourMap)
if err != nil {
panic(err)
}
b, err := json.Marshal(newMap)
if err != nil {
panic(err)
}
fmt.Println(string(b))
}
封装上述逻辑清晰的方法可能是宣布一个新的命名类型的地图,并实现在元帅方法新类型的自定义编组。