带有HTML转义字符串的JSON解组;无效字符';T';对象键后:值对;错误
我正在尝试在GO中解组一个JSON,如下所示:带有HTML转义字符串的JSON解组;无效字符';T';对象键后:值对;错误,html,json,go,escaping,unmarshalling,Html,Json,Go,Escaping,Unmarshalling,我正在尝试在GO中解组一个JSON,如下所示: { “标签”:“敏捷的棕色狐狸”跳过“懒狗”, “值”:“虚拟值” } 为此,我使用以下代码要点: 类型响应结构{ 标签字符串`json:“标签,省略空”` 值字符串`json:“值,省略为空”` } 正文:=`{ “标签”:“敏捷的棕色狐狸”跳过“懒狗”, “值”:“虚拟值” } ` res:=新的(响应) 如果err:=json.Unmarshal([]字节(html.UnescapeString(body)),&res);呃!=零{ fmt
{
“标签”:“敏捷的棕色狐狸”跳过“懒狗”,
“值”:“虚拟值”
}
为此,我使用以下代码要点:
类型响应结构{
标签字符串`json:“标签,省略空”`
值字符串`json:“值,省略为空”`
}
正文:=`{
“标签”:“敏捷的棕色狐狸”跳过“懒狗”,
“值”:“虚拟值”
}
`
res:=新的(响应)
如果err:=json.Unmarshal([]字节(html.UnescapeString(body)),&res);呃!=零{
fmt.Printf(“错误:%v”,错误)
}否则{
格式打印F(“%v”,分辨率)
}
但对于“
html转义字符,它给出的错误是对象键:值对之后的无效字符'T'
我可以在这里应用的一个解决方案:
我可以在所有“
之前添加\
。因此,一旦我使用func UnescapeString(s string)string
函数取消扫描,它将使我的标签字段变为“快速的”棕色狐狸”跳过“懒惰的狗”
,然后,我可以轻松地取消对它的扫描,而不会出现任何错误
body=strings.ReplaceAll(body,“\ \”,“\ \”)
请告诉我是否有其他更好的方法可以在这里应用。您可以使用自定义字符串类型实现该接口,该类型在解封自身后执行取消跳过操作
键入UnescapedString字符串
func(s*UnescapedString)解组JSON(数据[]字节)错误{
如果err:=json.Unmarshal(数据,(*string)(s));err!=nil{
返回错误
}
*s=UnescapedString(html.UnescapeString(string(*s)))
归零
}
为什么不在解组后逃跑@mkopriva——这是另一种方式。但在实际代码中,我有更多字段可以包含“
。对于那些,我不想手动操作。如果我在使用protobuf时无法更改响应
结构,该怎么办?在解组之前取消跳过是完全错误的。@VinayGupta您在使用吗?@Matteo-实际上,我正在使用第三方API获取响应,并将其解组为protobuf对象,因为我需要将对象传递到下一级预测服务(在python中)。为此,我使用了gRPC
,因为它是错误的。JSON不是HTML转义的,只有一些字符串值是。