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))
}
相关推荐
YONG823_API4 分钟前
电商大数据的几种获取渠道分享!
大数据·开发语言·数据库·爬虫·数据挖掘·数据分析
薔薇十字5 分钟前
【代码随想录day62】【C++复健】 97. 小明逛公园(Floyd 算法精讲);127. 骑士的攻击(A * 算法精讲)
开发语言·c++·算法
Sunyanhui112 分钟前
牛客网 SQL5将查询后的列重新命名
java·开发语言
白宇横流学长24 分钟前
面向特定群体的健康管理平台设计与实现[源码+文档]
java
SUN_Gyq30 分钟前
C++如何实现对象的克隆?如何实现单例模式?
java·开发语言·jvm·c++·算法
Beekeeper&&P...33 分钟前
AddressBookController
java·前端·网络
Cooloooo39 分钟前
最大堆【东北大学oj数据结构9-2】C++
java·数据结构·c++
小黄银技术栈44 分钟前
校园点餐订餐外卖跑腿Java源码
java·开发语言
向宇it1 小时前
【从零开始入门unity游戏开发之——C#篇11】一个标准 C# 程序介绍、新的值类型——枚举
开发语言·vscode·unity·c#·游戏引擎
安年CJ1 小时前
Python 中的指针:深入理解与应用
运维·开发语言·python