go 自己写序列化函数不转义

以map[int32]string转化为[]byte为例

背景:算法传给我一个map[int32]string类型的值(map的值本身是json转化成的string),我需要把这个值生成一个文件上传到OSS,但是发现通过url下载下来的文件里面有转义字符。

原因:直接通过json.json.Marshal(),最后肯定会发生转义的。

解决:搜索了一些方式发现都是会有转移的,所以决定自己写一个Marshal()。

go 复制代码
package main

import (
	"encoding/json"
	"fmt"
)

type RawString string

func (r RawString) MarshalJSON() ([]byte, error) {
	return []byte(r), nil
}

type RawBadCaseResult map[int32]RawString

func 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))
}
相关推荐
MapGIS技术支持4 分钟前
MapGIS Objects Java计算一个三维点到平面的距离
java·开发语言·平面·制图·mapgis
Coder_Boy_7 分钟前
业务导向型技术日志首日记录(业务中使用的技术栈)
java·驱动开发·微服务
程序员zgh33 分钟前
C++ 互斥锁、读写锁、原子操作、条件变量
c语言·开发语言·jvm·c++
小灰灰搞电子1 小时前
Qt 重写QRadioButton实现动态radioButton源码分享
开发语言·qt·命令模式
by__csdn1 小时前
Vue3 setup()函数终极攻略:从入门到精通
开发语言·前端·javascript·vue.js·性能优化·typescript·ecmascript
喵了meme1 小时前
C语言实战5
c语言·开发语言
盖世英雄酱581361 小时前
springboot 项目 从jdk 8 升级到jdk21 会面临哪些问题
java·后端
济南壹软网络科技有限公司1 小时前
企业级盲盒系统:Java高并发架构在多元化抽奖电商中的设计与实践
java·架构·开源源码·盲盒源码·盲盒h5·盲盒app
廋到被风吹走1 小时前
【Java】常用设计模式及应用场景详解
java·开发语言·设计模式
一条可有可无的咸鱼2 小时前
企业招聘信息,企业资讯进行公示
java·vue.js·spring boot·uni-app