在内存中清除格式错误的json的最彻底的方法

时间:2014-03-07 17:30:17

标签: json groovy

使用一些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忽略注释而不是使用这种实用方法,那么该解决方案将被认为更有价值。提前谢谢!

2 个答案:

答案 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();'

这将删除以/**开头的所有行,以及//之后的所有行。