使用json.Marshal 如果字符串中含有 < > &字符会出现自动转义问题 不太符合预期输出

原始字符 转义后
&         \u0026
< \u003c
> \u003e

原始的json.marshal会开启EscapeHTML 解决代码如下

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
)

type Test struct {
	Data string
}

func main() {
	t := Test{Data: "http:// 127.0.0.1/test?name=1&age=3"}
	bytes, err := json.Marshal(t)

	fmt.Println(string(bytes), err)
	bytes, err = JsonMarshal(t)
	fmt.Println(string(bytes), err)
}

func JsonMarshal(data any) ([]byte, error) {
	bf := bytes.NewBuffer([]byte{})
	jsonEncoder := json.NewEncoder(bf)
	jsonEncoder.SetEscapeHTML(false)
	if err := jsonEncoder.Encode(data); err != nil {
		return nil, err
	}

	return bytes.TrimSpace(bf.Bytes()), nil
}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐