Go언어 golang
2023-03-24 json decoder 주석 허용 하는 기능 구현
미래의 고
2023. 3. 24. 19:41
이전 포스팅에서 오류가 나는 경우가 있어서 직접 작성하였습니다.
정규식으로 한 줄만 처리하도록 하였습니다. '//' 주석만 처리할 수 있습니다.
특별한 설명 없이 바로 가보실까요?
테스트 json파일
{
"service_ip": "1.1.1.1", // 안아ᄋᆫ안
"node_name": "node_1", //kljfds
"info": { // kjfdklsj
"service_name": "TheGolangOfFuture",// jkjdsj_kfdjs!#@#$%^^&*()()_ jfj // jdjd//
"desc": "미래의 고"// 안아ᄋᆫ안안ㅇ
}
}
결과는 다음과 같습니다.
package main
import (
"encoding/json"
"fmt"
"os"
"path"
"regexp"
)
type Config struct {
ServiceIp string `json:"service_ip"`
NodeName string `json:"node_name"`
Info struct {
ServiceName string `json:"service_name"`
Desc string `json:"desc"`
} `json:"info"`
}
func tidyJson(data []byte) []byte {
m := regexp.MustCompile("\\/\\/.*")
data = m.ReplaceAll(data, []byte(""))
return data
}
func main() {
cwd, err := os.Getwd()
if err != nil {
panic(err)
}
binConfig, err := os.ReadFile(path.Join(cwd, "config.json"))
if err != nil {
panic(err)
}
fmt.Println(string(binConfig))
var config Config
binConfig = tidyJson(binConfig)
json.Unmarshal(binConfig, &config)
fmt.Println(string(binConfig))
fmt.Printf("%+v", config)
}