使用无效字符解组JSON
我有一个来自web服务的json,它可能对json解组无效,因为它是人工输入的值。我也无法控制这些值,因为它们是通过外部API输入的。是否有一种干净的方法来清理输入,以便在解组到结构之前从使用无效字符解组JSON,json,go,Json,Go,我有一个来自web服务的json,它可能对json解组无效,因为它是人工输入的值。我也无法控制这些值,因为它们是通过外部API输入的。是否有一种干净的方法来清理输入,以便在解组到结构之前从[]字节中删除所有无效值 package main import ( "fmt" "encoding/json" ) type Test struct { Field string `json:"test"` } func main() { test := `{"test"
[]字节中删除所有无效值
package main
import (
"fmt"
"encoding/json"
)
type Test struct {
Field string `json:"test"`
}
func main() {
test := `{"test": " "}` //this is a tab character
obj := Test{}
if err := json.Unmarshal([]byte(test) , &obj); err != nil {
fmt.Printf("%v", err)
}
}
然后返回的错误是:
字符串文字中的无效字符“\t”
字符串。替换(测试“\t”、“\\t”、-1)
将起作用,除非JSON数据是用制表符打印的。您应该联系外部API的维护人员,告诉他们生成有效的JSON(否则他们应该停止说他们发送JSON响应).你不应该浪费精力解析任意文本。看起来他们不会在JSON文本中转义值,这意味着如果他们的用户输入引号,那么他们的响应就会爆炸?该死的,用户只需构造JSON数据,如果他们输入这些数据,他们基本上可以注入任何他们想要的响应(“JSON注入”攻击…)。如果你坚持使用这个API,你就容易受到攻击。根本没有可靠的方法来纠正格式错误的JSON。您无法知道文本制表符是否应该是字符串值的一部分,或者是否缺少引号,从而使制表符变得无关紧要。只有制片人知道这一点。