使用一些json文件,遇到包含c样式注释的一些格式错误的文件。假设我没有这些文件的所有权,并且不能更改它们,我需要以自动方式分析json数据。当JsonSlurper看到这些评论时就死了,所以我写了一个删除违规行的方法:
def filterComments(String raw){
def filtered = ""
raw.eachLine { line ->
def tl = line.trim()
if(!(tl.startsWith("//") || tl.startsWith("/**") || tl.startsWith("*"))){
filtered += line;}}
return filtered;
}
我非常喜欢Groovy并且已经将它作为我选择的维护工具,但我不是“Grooviest”开发人员,这是一个例子。我希望有更多Groovy方法来实现这一目标。
一些附加说明:这是作为脚本运行的。如果有办法让JsonSlurper忽略注释而不是使用这种实用方法,那么该解决方案将被认为更有价值。提前谢谢!
答案 0 :(得分:3)
我的看法:
def filterComments(str){
str.readLines().findAll{ !(it ==~ /^\s*(\*|\/\*\*|\/\/).*/) }.join('\n')
}
答案 1 :(得分:3)
这是一种方法:
def json = '''
// A comment
Foo f = new Foo(); // this is a comment
/*
* Multiline comment
*
*/
'''
def filterComments(str) {
str?.replaceAll(/(\/\/|\/\*|\*).*\n?/, '')?.trim()
}
assert filterComments(json) == 'Foo f = new Foo();'
这将删除以/*
或*
开头的所有行,以及//
之后的所有行。