需要校验是否为有效JSON格式字符串的场景
做开发的同学特别是做后端开发的同学平常应该经常遇到这种场景,例如接口某个参数需要json类型的字符串、某项配置需要为json类型的字符串、从三方获取的数据需要为json类型字符串等等,这些场景都需要严格校验对应数据是否为json格式,如果不校验的话可能会产生某些未知的问题甚至会导致安全漏洞产生。
Golang中的校验方法
平常看到很多开源代码库和小伙伴们写的代码中都是自己实现的方法,虽然也勉强能达到效果,但是不够优雅,有的甚至有性能问题。
Golang的 encoding/json 包提供了一个用于检测是否为json格式的方法 Valid,下面看下方法的注释和定义:
// Valid reports whether data is a valid JSON encoding.
func Valid(data []byte) bool {
scan := newScanner()
defer freeScanner(scan)
return checkValid(data, scan) == nil
}
下面通过一段代码来看一下使用方法:
package main
import (
"encoding/json"
"fmt"
)
func main() {
validJSONStr := `{"key": "val"}` // json格式
invalidJSONStr := `{"key":val}` // 非json格式
fmt.Println(json.Valid([]byte(validJSONStr)), json.Valid([]byte(invalidJSONStr)))
}
可以看出成功检测出了是否为json格式。
小结
本文介绍了Golang中验证是否为json格式数据的方法及使用方法,下篇文章我们来剖析下源码看下 encoding/json 包中 Valid 方法的实现原理。