go 自己写序列化函数不转义
以map[int32]string转化为[]byte为例
背景:算法传给我一个map[int32]string类型的值(map的值本身是json转化成的string),我需要把这个值生成一个文件上传到OSS,但是发现通过url下载下来的文件里面有转义字符。
原因:直接通过json.json.Marshal(),最后肯定会发生转义的。
解决:搜索了一些方式发现都是会有转移的,所以决定自己写一个Marshal()。
package mainimport ("encoding/json""fmt"
)type RawString stringfunc (r RawString) MarshalJSON() ([]byte, error) {return []byte(r), nil
}type RawBadCaseResult map[int32]RawStringfunc toRawResult(reviewResult map[int32]string) RawBadCaseResult {res := make(map[int32]RawString)for k, v := range reviewResult {res[k] = RawString(v)}return res
}func main() {result := make(map[int32]string)result1 := make(map[string]string)result1["name"] = "zhang"result1["age"] = "20"result2 := make(map[string]string)result2["name"] = "huang"result2["age"] = "20"bytes1, err := json.Marshal(result1)if err != nil {fmt.Println(err)}bytes2, err := json.Marshal(result2)if err != nil {fmt.Println(err)}result[1] = string(bytes1)result[2] = string(bytes2)rawReviewResult := toRawResult(result)var ReviewResultBytes []byte// 最后生成文件的时候传入的是ReviewResultBytes,通过url下载的文件没有转义字符了。ReviewResultBytes, err = json.Marshal(rawReviewResult)if err != nil {fmt.Println(err)}fmt.Println(string(ReviewResultBytes))
}