假设您有一个包含C样式注释的json文件
{
"foo": {
"default_level": "debug",
// A comment
"impl": "xyz"
},
"bar": [
{
/*This is a comment*/
"format": "%l%d %c ….",
"rotation": "daily, 1_000_000",
}
]
}
在此之前,json被反序列化,使用Java
删除这些注释的最简单方法是什么?让我们假设只支持单行//
和多行/**/
注释。
最后,我想阅读相同文件的String
表示,但没有评论:
{
"foo": {
"default_level": "debug",
"impl": "xyz"
},
"bar": [
{
"format": "%l%d %c ….",
"rotation": "daily, 1_000_000",
}
]
}
答案 0 :(得分:1)
可能更好的运气处理这个Javascript,因为JSON几乎是Javascript的一个子集,而JSON + C类的注释实际上几乎是Javascript的一个子集。尝试:
Looking to remove comments from a large amount of javascript files
基本上 - 首先通过你喜欢的minifier运行它。请注意JSON is not a strict subset of Javascript,因此您需要先将合法的JSON插入合法的Javascript中,然后才能信任缩小器。幸运的是,这可以通过简单的查找和替换来解决。
答案 1 :(得分:0)
实际上是一个非平凡的问题。我个人建议使用Comment-Stripper库,IMO可以很好地完成这项工作。在此处找到:https://github.com/Slater-Victoroff/CommentStripper?source=cc
更多功能齐全且已调试的版本不久前已经分叉,但希望这可以解决这个问题。
完全披露:我在问了一个类似的问题后写了这个库,并意识到我找不到任何好的解决方案。
或者,如果您只想删除注释,我相信您可以在Python中轻松完成,您可以使用Jython调用它。
import json
return json.dumps(json.loads("file.json"))
如果你在Native Java上设置了死机,你可以使用GSON做同样的事情。 (http://code.google.com/p/google-gson/)并且我认为杰克逊(http://jackson.codehaus.org/)也可以这样做,尽管我会建议更轻松的GSON这么简单。
GSON示例:
Gson gson = new Gson();
BufferedReader br = //BufferedReader for your source;
String clean = gson.toJson(gson.fromJson(br, Class.class))
示例是在了解有一些需要使用的支持代码的情况下给出的,此示例仅封装了GSON的使用。剩下的应该是非常简单的(制作一个泛型类),如果你真的遇到麻烦,请查看GSON文档。
答案 2 :(得分:-4)
试试这个正则表达式。
String jsonData =
"{\n"+
" \"foo\": {\n"+
" \"default_level\": \"debug\",\n"+
" // A comment\n"+
" \"impl\": \"xyz\"\n"+
" },\n"+
" \"bar\": [\n"+
" {\n"+
" /*This is a comment*/\n"+
" \"format\": \"%l%d %c ….\",\n"+
" /* This is a\n"+
" multi-line comment */\n"+
" \"rotation\": \"daily, 1_000_000\",\n"+
" }\n"+
" ]\n"+
"}";
System.out.println(
jsonData.replaceAll("//.*\\n\\s*|/\\*.*?\\n?.*?\\*/\\n?\\s*", "")
);
的输出:强> 的
{
"foo": {
"default_level": "debug",
"impl": "xyz"
},
"bar": [
{
"format": "%l%d %c ….",
"rotation": "daily, 1_000_000",
}
]
}
注意:如果您的json可以将注释字符作为数据
,则无效 "comment":"/* this is data */", "impl": "abc//xyz"