英文:
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"}
答案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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论