使用无效字符解组JSON

使用无效字符解组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"

我有一个来自web服务的json,它可能对json解组无效,因为它是人工输入的值。我也无法控制这些值,因为它们是通过外部API输入的。是否有一种干净的方法来清理输入,以便在解组到结构之前从
[]字节中删除所有无效值

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。您无法知道文本制表符是否应该是字符串值的一部分,或者是否缺少引号,从而使制表符变得无关紧要。只有制片人知道这一点。