【问题标题】:Robust json parser in Python or JavaPython 或 Java 中强大的 json 解析器
【发布时间】:2013-06-03 14:37:32
【问题描述】:

我正在寻找 Python 或 Java 中的 健壮 json 解析器(到目前为止,我一直在使用 Python,但由于我使用它来分析 Java 基准,使用Java 是一个合理的选择。)

对于截断和不完整的文档非常强大。

原因是我目前正在使用caliper 进行一些(微)基准测试,而当基准测试仍在运行(或者如果我过早取消它),输出文件将不是完整的 JSON 文档。 jsonsimplejson 都不会读取这些在某些时候基本上被截断的文件。

(我不喜欢 Caliper 网络界面,因为它很慢,无法扩展到大型实验集,而且很多数据无法提交,然后在运行中丢失。)

文件大概是这样的:

[
  {
    // first record, in multiple lines
  },
  {
    // second record, in multiple lines
  },
  {
    // truncated record.

现在,我正在使用一个讨厌的 hack,它使用 caliper 当前生成的已知缩进将},\n\ \ { 处的结果文档拆分为块,然后仅解析这些块,直到最后一个失败。但这是一个令人讨厌的黑客行为,并且对未来卡尺输出的变化并不稳健。我也尝试过使用raw_decode,但它仍然需要完整的文档,并且不会在每个}, 处返回有意义的结果。

我正在寻找类似于例如的 API XML pull,这将允许我在基于事件的 API 中访问文档直到它被截断的点。本质上,我对包装器 [] 中所有完整的 {} 部分感兴趣。

【问题讨论】:

  • 你看过杰克逊的JsonParser吗?
  • 谢谢,我去看看。流媒体本质上是我需要的,是的。到目前为止,我一直在使用 python 进行后期处理。

标签: java python json parsing caliper


【解决方案1】:

Jackson 支持基于事件的解析。它还允许您流式传输文档,但对您感兴趣的部分使用树 API。有一篇博文演示了这种方法 here

【讨论】:

  • 也感谢指向readValueAsTree 的指针。这正是我所需要的。现在如果你碰巧也知道类似的python API,那么问题就完全回答了。
  • Googles Gson 也允许流式使用,这种方式可以用于这个特定的用例。由于 caliper 也使用 Gson,我实际上可以使用 caliper 代码将数据一直解析为专门的 Java 类。
猜你喜欢
  • 2015-09-01
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多