第
详解Go语言如何解析带注释的json
目录一、背景和意义二、go语言解析普通json三、go语言解析带注释json四、其他特殊情况验证
一、背景和意义
标准的json格式是不带注释,但是有时候为了方便理解json中各字段的含义,需要支持带注释的json。例如在日常工作中常用的接口文档管理平台yapi在配置接口参数与接口返回、或者创建mock数据时,就支持配置带注释的json。本文给出用go语言解析带注释的json的示例。
二、go语言解析普通json
go语言官方自带的json库可以解析普通的json。例如,我们创建一个main.go文件,代码如下:
packagemain
import(
encoding/json
fmt
typeuserstruct{
Namestring
Ageint
Addressstruct{
Citystring
Countrystring
funcmain(){
jsonStr:=`{
name:ZhangSan,
age:11,
address:{
city:Shanghai,
country:China
user:=user{}
err:=json.Unmarshal([]byte(jsonStr),user)
iferr!=nil{
fmt.Printf(json解析失败:%+v,err)
}else{
fmt.Printf(json解析结果:%+v,user)
运行gorunmain.go命令,运行结果为:
json解析结果:{Name:ZhangSanAge:11Address:{City:ShanghaiCountry:China}}
但是假如我们在json中增加以//...或者/*...*/格式的注释:
packagemain
import(
encoding/json
fmt
typeuserstruct{
Namestring
Ageint
Addressstruct{
Citystring
Countrystring
funcmain(){
jsonStr:=`{
name:ZhangSan,//姓名
age:11,//年龄
/*地址信息开始*/
address:{
city:Shanghai,
country:China
/*地址信息结束*/
user:=user{}
err:=json.Unmarshal([]byte(jsonStr),user)
iferr!=nil{
fmt.Printf(json解析失败:%+v,err)
}else{
fmt.Printf(json解析结果:%+v,user)
然后执行命令gorunmain.go,可看到运行结果为:
json解析失败:invalidcharacter/lookingforbeginningofobjectkeystring
三、go语言解析带注释json
使用/titanous/json5库可以解析带注释的json
packagemain
import(
fmt
/titanous/json5
typeuserstruct{
Namestring
Ageint
HomePagestring
Addressstruct{
Citystring
Countrystring
funcmain(){
jsonStr:=`{
name:ZhangSan,//姓名
age:11,//年龄
/*地址信息开始*/
address:{
city:Shanghai,
country:China
/*地址信息结束*/
user:=user{}
err:=json5.Unmarshal([]byte(jsonStr),user)
iferr!=nil{
fmt.Printf(json解析失败:%+v,err)
}else{
fmt.Printf(json解析结果:%+v,user)
运行结果如