本文来剖析一下json.Valid方法的源码。
柳北网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。创新互联公司于2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司。
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
}
scan := newScanner() 获取一个 scanner 类型的对象,关键的是checkValid方法,checkValid源码如下:
// checkValid verifies that data is valid JSON-encoded data.
// scan is passed in for use by checkValid to avoid an allocation.
func checkValid(data []byte, scan *scanner) error {
scan.reset()
for _, c := range data {
scan.bytes++
if scan.step(scan, c) == scanError {
return scan.err
}
}
if scan.eof() == scanError {
return scan.err
}
return nil
}
首先调用了scan.reset(),主要是初始化scanner关键字段,如下:
s.step = stateBeginValue
s.parseState = s.parseState[0:0]
s.err = nil
s.endTop = false
然后就是通过遍历要校验的数据,使用状态机方式做判断。
接下来以 {"a":"b"} 为例,来看下整个的判断过程:
大家可以结合源码和本文来自己体会一下整个的检测过程。json.Valid方法会把例如123、true、false、null等也认为是json编码,这可能不是大家在开发过程中想要的结果,所以下一篇文章会介绍基于json.Valid方法改造后的方法,完美得实现json格式校验。
本文名称:Golang校验字符串是否JSON格式方法Json.Valid源码解析
URL地址:http://www.shufengxianlan.com/qtweb/news17/225517.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联