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))
}
相关推荐
爬山算法几秒前
Hibernate(38)如何在Hibernate中配置乐观锁?
android·java·hibernate
奔跑的web.1 分钟前
TypeScript 全面详解:对象类型的语法规则
开发语言·前端·javascript·typescript·vue
江上月5135 分钟前
JMeter中级指南:从数据提取到断言校验全流程掌握
java·前端·数据库
晨旭缘6 分钟前
零基础后端入门:JDK21 + PostgreSQL+Java项目
java·数据库·postgresql
BullSmall7 分钟前
SpringBoot 项目日志规范(企业级标准 + 最佳实践)
java·spring boot·spring
better_liang7 分钟前
每日Java面试场景题知识点之-线程池
java·线程池·并发编程·juc·企业级开发
雁门.17 分钟前
qt封装dll及调用
开发语言·qt
一直都在5728 分钟前
SpringBoot:自动配置原理
java·spring boot·spring
小李独爱秋8 分钟前
计算机网络经典问题透视:互联网的网络层安全协议族IPsec都包含哪些主要协议?
运维·服务器·开发语言·网络协议·计算机网络·安全
ss2739 分钟前
ruoyi 新增每页分页条数
java·数据库·mybatis