Golang中如何校验字符串是否为JSON格式?

需要校验是否为有效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 方法的实现原理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路多辛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值