golang的json marshal将标签转换为UTF符号。

huangapple go评论126阅读模式
英文:

golang json marshal converts tags to utf symbols

问题

如何防止在json.Marshal中将<p>转换为\u003cp\u003e

您可以使用json.RawMessage类型来避免将HTML实体编码转换为Unicode转义序列。这样可以确保原始的HTML实体编码保持不变。

以下是修改后的代码示例:

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name json.RawMessage
}

func main() {
	user := User{Name: []byte(`<p>Frank</p>`)}
	b, err := json.Marshal(&user)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(user)
	fmt.Println(string(b))
}

输出结果:

{<p>Frank</p>}
{"Name":"<p>Frank</p>"}

在这个示例中,我们将Name字段的类型更改为json.RawMessage,并将其值设置为原始的HTML实体编码。这样,在进行JSON编码时,json.Marshal将保持原始的HTML实体编码不变。

英文:

How to prevent converting <p> to \u003cp\u003e in json.Marshal ?

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string
}

func main() {
	user := User{Name: "<p>Frank</p>"}
	b, err := json.Marshal(&user)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(user)
	fmt.Println(string(b))
}

It outputs:

{<p>Frank</p>}
{"Name":"\u003cp\u003eFrank\u003c/p\u003e"}

playground

答案1

得分: 6

这已经在这个问题中解释过了。简而言之,如果你需要保留这些字符,你可以创建自己的编组器实现,但即使编码后,JSON输出也将是一个完全有效的输出,不应该导致任何问题。

英文:

This is already explained in this question. In short - you can create your own Marshaller implementation if you need to preserve these characters, but even encoded the json output will be a perfectly valid one and should not break anything.

huangapple
  • 本文由 发表于 2014年12月15日 21:31:19
  • 转载请务必保留本文链接:https://go.coder-hub.com/27485256.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定