2012-10-01 80 views
3

全部的C風格評論。我試圖編寫一個特定類型的配置文件,這是JSON編碼的包裝。不幸的是,這個文件包含C風格的註釋(///* */),並且這些導致了json.Unmarshal中的錯誤。有沒有辦法強制Unmarshal忽略這些評論,或以其他方式輕鬆刪除它們?刪除[]字節

我正在調查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你說得對(雖然我可能會抱怨字符串末尾沒有換行符)。如果他/她感興趣,我會把它作爲練習提交給提問者。 –

0

因爲JSON不允許評論,所以你肯定需要寫點東西,所以我會很驚訝,如果去的json pkg促成忽略不屬於規範的評論。