html - 带有 HTML 转义字符串的 JSON 解组,在对象键:值对后给出“无效字符 'T'”错误
问题描述
我正在尝试在 GO 中解组如下所示的 JSON:
{
"label": "The quick "brown fox" jumps over the "lazy dog"",
"value": "dummy value"
}
为此,我使用以下代码要点:
type Response struct {
Label string `json:"label,omitempty"`
Value string `json:"value,omitempty"`
}
body := `{
"label": "The quick "brown fox" jumps over the "lazy dog"",
"value": "dummy value"
}
`
res := new(Response)
if err := json.Unmarshal([]byte(html.UnescapeString(body)), &res); err != nil {
fmt.Printf("Error: %v", err)
} else {
fmt.Printf("%v", res)
}
但特定于"
html 转义字符,它给出的错误为invalid character 'T' after object key:value pair
.
https://play.golang.org/p/wzvFazO1Swx
我可以在这里应用的一种解决方案:
我可以\
在所有之前添加"
。因此,一旦我使用函数取消转义,func UnescapeString(s string) string
它将使我的标签字段"The quick \"brown fox\" jumps over the \"lazy dog\""
在此之后,我可以轻松地解组它而不会出现任何错误。
body = strings.ReplaceAll(body, """, "\\"")
https://play.golang.org/p/fD6NdJNnMvS
如果有其他更好的方法可以在这里申请,请告诉我。
解决方案
您可以json.Unmarshaler
使用自定义字符串类型来实现接口,该类型在解组自身后进行反转义。
type UnescapedString string
func (s *UnescapedString) UnmarshalJSON(data []byte) error {
if err := json.Unmarshal(data, (*string)(s)); err != nil {
return err
}
*s = UnescapedString(html.UnescapeString(string(*s)))
return nil
}
推荐阅读
- python - A 到 L 小写和 M 到 Z 大写
- google-chrome-os - 如何找出我的 Crostini 容器的 IP 地址?
- python - 反复打开和销毁窗口时使用全局变量的问题
- python - 从 pandas 的 1 个 csv 文件中读取多个表
- python-3.x - 从 Python 停止使用 urlretrieve 下载 xls/csv 文件
- spring - 如何使用 Spring Data ElasticsearchTemplate 连接到 Amazon Elasticsearch Service?
- python - 更多问题“简单”杂货清单
- php - 句子的正则表达式
- java - JAVA 服务提供者 SAML2 请求 - 禁用数字签名
- node.js - 猫鼬发现结果不刷新