4

全部。我正在尝试为特定类型的配置文件编写一个包装器,该文件是 JSON 编码的。不幸的是,该文件包含 C 风格的注释(///* */,),这些会导致json.Unmarshal. 有没有办法强制 Unmarshal 忽略这些评论,或者以其他方式轻松删除它们?

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

4

2 回答 2

8

您必须去掉注释,因为 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))
}
于 2012-10-02T00:18:13.417 回答
-1

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

于 2012-10-01T23:52:29.880 回答