微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有 HTML 转义字符串的 JSON 解组在对象键:值对后给出“无效字符 'T'”错误

如何解决带有 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
}

https://play.golang.org/p/u-hFadUT2_S

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。