Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有HTML转义字符串的JSON解组;无效字符';T';对象键后:值对;错误_Html_Json_Go_Escaping_Unmarshalling - Fatal编程技术网

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

带有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

我正在尝试在GO中解组一个JSON,如下所示:

{
“标签”:“敏捷的棕色狐狸”跳过“懒狗”,
“值”:“虚拟值”
}
为此,我使用以下代码要点:

类型响应结构{
标签字符串`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转义的,只有一些字符串值是。