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)
}