【问题标题】:Parsing a large json file using gson使用 gson 解析大型 json 文件
【发布时间】:2018-10-02 17:57:57
【问题描述】:

我有一个非常大的 json 可以读取并存储到数据库中。我正在使用 gson 使用流和对象的混合模式。如果文件格式正确,它就像一个魅力。但如果对象中的格式不正确,则会跳过整个文件并出现异常(reader.hasNext() 抛出异常)。

有没有办法跳过特定的坏记录并继续读取文件的其余部分?

示例 json 文件结构 - [{ “一”:1, “乙”:2, “C”:3 }] 假设这个对象中缺少逗号或冒号。

另一个例子是如果有多个对象并且在 }(no comma){ 2 个对象之间缺少逗号。

【问题讨论】:

  • 生产者有责任提供有效的 JSON。消费者有责任只允许有效的 JSON。尝试处理格式错误的数据是不安全的。
  • @Compass 我明白这一点,但有可能某些数据的 json 格式不正确,这会导致所有记录的执行停止。
  • 如果格式不正确,则不应处理它。通过尝试处理损坏或不正确的数据,您需要对基于您对该数据可能不正确的解释而发生的任何错误负责,而不是去源头并要求他们修复数据。
  • 嗯,你是对的,但我只有一个选择,就是跳过那些坏数据并继续下一条记录。
  • 你永远不应该在没有给出大小的情况下说“真的很大”。对于物理学家来说,“非常长的时间”可能意味着飞秒。

标签: java json gson


【解决方案1】:

假设此对象中缺少逗号或冒号

很遗憾,如果您缺少逗号或冒号,则无法解析 JSON 数据。

但是: 解析器不接受这些数据实际上是一件好事,因为它可以防止您意外读取垃圾。由于您将这些数据放入数据库,因此它可以保护您免于将垃圾填满数据库。

我认为最好的解决方案是修复此 JSON 数据的生产者,并实施必要的安全措施以防止将来出现错误的 JSON 数据。

【讨论】:

    猜你喜欢
    • 2013-04-28
    • 2012-04-21
    • 2015-03-09
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多