>> print(-6ren">
gpt4 book ai didi

json - 在 Go JSON 中转义 unicode 字符,以便输出与 Python 匹配

转载 作者:IT王子 更新时间:2023-10-29 01:42:08 31 4
gpt4 key购买 nike

在 Python 2.7 中,如果我对 JSON 进行编码,我会得到 unicode 转义字符串:

>>> import json
>>> s = {"text": "三杯雞"}
>>> print(json.dumps(s))

它给出了这个输出:

{"text": "\u4e09\u676f\u96de"}

但是在 Go 中,类似的代码:

package main

import (
"encoding/json"
"fmt"
)

type Food struct {
Name string `json:"name"`
}

func main() {
food := Food{Name: "三杯雞"}
v, _ := json.Marshal(food)
fmt.Println(string(v))
}

给出这个:

{"name":"三杯雞"}

汉字不转义。我正在将 API 端点从 Python 移植到 Go - 如何让它具有与 Python 相同的转义输出?

我尝试使用 strconv.QuoteToASCII 进行变体,但它们导致 unicode 被双重转义:

func main() {
s := strconv.QuoteToASCII("三杯雞")
s = strings.Trim(s, "\"")
food := Food{Name: s}
v, _ := json.Marshal(food)
fmt.Println(string(v))
}

输出:

{"name":"\\u4e09\\u676f\\u96de"}

最佳答案

一种解决方案是在自定义 JSON 编码(marshal)拆收器中使用 strconv.QuoteToASCII 方法:

package main

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

type Food struct {
Name utf8String `json:"name"`
}

type utf8String string

func (s utf8String) MarshalJSON() ([]byte, error) {
return []byte(strconv.QuoteToASCII(string(s))), nil
}

func main() {
food := Food{Name: utf8String("三杯雞")}
v, _ := json.Marshal(food)
fmt.Println(string(v))
}

输出:

{"name":"\u4e09\u676f\u96de"}

这有一个缺点,您不能在结构定义中使用普通的 string 类型,但最终输出是 ASCII 引用的,就像在 Python 中一样。

关于json - 在 Go JSON 中转义 unicode 字符,以便输出与 Python 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37304152/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com