从[]字节中删除C风格的注释

时间:2012-10-01 23:14:17

标签: regex go

所有。我正在尝试为特定类型的配置文件编写一个包装器,它是JSON编码的。很遗憾,此文件包含C风格的评论(///* */,),这些评论会导致json.Unmarshal出错。有没有办法迫使Unmarshal忽略这些评论,或以其他方式轻易删除它们?

我现在正在研究regexp,但我希望有一个优雅的解决方案,作为Go的初学者,我可能无法在几分钟内提出。< / p>

2 个答案:

答案 0 :(得分: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))
}

答案 1 :(得分:0)

你肯定需要写一些东西,因为JSON不允许评论,所以同样如果go json pkg促使忽略那些不属于规范的评论,我会感到惊讶。