2012-10-01 2 views
3

모두. JSON 인코딩 된 구성 파일의 특정 유형에 대한 래퍼를 쓰려고합니다. 불행히도이 파일에는 C 스타일의 주석 (///* */)이 포함되어 있으며 이러한 오류의 원인은 json.Unmarshal입니다. Unmarshal이 이러한 주석을 무시하거나 쉽게 제거 할 수있는 방법이 있습니까?[] 바이트에서 C 스타일 주석을 제거하십시오.

나는 지금 regexp을 조사하고 있지만, Go의 초보자로서 몇 분 안에 나올 수없는 멋진 솔루션이 있기를 바랍니다.

답변

6

JSON 사양에서 주석을 허용하지 않으므로 주석을 제거해야합니다. 정규 표현식으로 작업을 수행 할 수 있습니다.

package main 

import (
    "fmt" 
    "regexp" 
) 

var bytes = []byte(`// this is a line comment 
this is outside the comments 
/* this 
    is 
    a 
    multi-line 
    comment */`) 

func main() { 
    re := regexp.MustCompile("(?s)//.*?\n|/\\*.*?\\*/") 
    newBytes := re.ReplaceAll(bytes, nil) 
    fmt.Println(string(newBytes)) 
} 
+0

이 작업은 완벽하게 수행되었습니다. 고마워요! –

+0

버그 : http://play.golang.org/p/PC1DQDj0Wf – zzzz

+1

@jnml 맞아. (문자열 끝에 줄 바꿈이없는 것에 대해 불평 할 지 모르지만) 맞아. 나는 그/그녀가 관심이 있다면 asker에게 운동으로 떠날거야. –

0

JSON이 주석을 허용하지 않기 때문에 뭔가를 써야 할 필요가 있습니다. 따라서 json pkg으로 이동하면 사양에 포함되지 않은 주석을 무시하게되어 놀랍습니다.

관련 문제