【问题标题】:Fastest means of removing comments from JSON in java?在java中从JSON中删除评论的最快方法?
【发布时间】:2018-09-18 21:39:16
【问题描述】:

在互联网上到处寻找可靠的 json 注释剥离器和压缩器的 java 端口,但大多数都是有缺陷的设计(不支持多行 cmets,或字符串中的注释模式)。

所以我匆匆忙忙地把它扔到了一起:https://gist.github.com/justisr/abab012af3ef399908798a687185d49a

在我拥有的现有 json 文件上对其进行了测试,一切都按预期进行,但我并不满意。 从 json 字符串中剥离 cmets 真的没有更快/标准的方法吗?

以前我使用https://github.com/getify/JSON.minify,但它很慢,而且文件末尾的常规 // 注释再次破坏了它,因此我绝望了。

【问题讨论】:

  • 根据定义,JSON 格式不能包含任何形式的 cmets(///* ... */ 都不是),您指的是 JavaScript 对象吗?
  • 当然可以。 Javascript cmets 在其他合法的 JSON 对象中。
  • 我明白了。我以前从未见过将 JavaScript 标准化为 JSON 的库。我想你的要点很好,除非你希望应用一个真正的 JavaScript 解析器,它无论如何都会比你只擦除 cmets 的专用代码慢。
  • YAML 在配置文件的世界中接管了 JSON :) 但它确实缺少对 cme​​ts 的支持(纯标准)是 JSON 的最大缺点,令人惊讶的是为什么这种格式如此受欢迎对于有这种缺陷的配置文件。
  • 请参阅JSON5,了解带有 cmets 的“标准” JSON 风格。不确定它的采用范围有多广,但最近 IntelliJ 中添加了对 JSON5 的支持,这是一个好兆头。

标签: java json comments minify


【解决方案1】:

最简单的方法是通过Jackson 运行您的 JSON:

public static String removeComments(String json) throws IOException {
  ObjectMapper mapper = new ObjectMapper();
  mapper.enable(JsonParser.Feature.ALLOW_COMMENTS);
  return mapper.writeValueAsString(mapper.readTree(json));
}

如果您想变得更高级,可以使用 Jackson 的流式 API 来避免在内存中缓冲文档,但除非您的文档很大或性能绝对关键,否则这可能是矫枉过正。

【讨论】:

  • 该死的;我怎么可能没有意识到杰克逊有一个允许 cmets 选项。正如他们所说的那样隐藏在明显的视线中......谢谢。
猜你喜欢
  • 2021-05-01
  • 1970-01-01
  • 2011-12-18
  • 2013-07-20
  • 2015-10-31
  • 1970-01-01
  • 2013-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多