基本信息
文件名称:详解Go语言如何解析带注释的json.docx
文件大小:16.68 KB
总页数:6 页
更新时间:2025-05-21
总字数:约3.11千字
文档摘要

详解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)

运行结果如