JSON 使用 HTML 转义字符串解组给出 "invalid character 'T' after object key:value pair" 错误
JSON unmarshal with HTML escaped strings giving "invalid character 'T' after object key:value pair" error
我正在尝试在 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
}
我正在尝试在 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
}