【问题标题】:Maximum size of Json handled by JacksonJackson 处理的最大 Json 大小
【发布时间】:2017-01-11 15:51:33
【问题描述】:

Jackson 可以处理的 JSON 文件的大小是否有限制? 我的 JSON 可能很大。简单例子:

{
  "people": [
    {
      "Name": "John Smith",
      "number": "123-456-789"
    },
    {MILIONS OF OTHER PEOPLES}
  ],
  "cars": [MILIONS OF CARS],
  "dogs": [MILIONS OF DOGS],
  MORE HERE
}

它可以是 5GB 或更多。我必须使用 Jackson 创建它并通过网络发送到另一个系统。记忆不是问题,但杰克逊呢?它可以毫无问题地写/读吗?

编辑:我不认为它是重复的。我不是在问如何解析巨大的 Json 文件,而是 Json/Jackson 的限制(如果有的话)

【问题讨论】:

  • 不确定这里的技术细节,但不管“内存不是问题”,您可能做错了什么:如果您使用 JSON 持久化对象,请考虑使用 ad-hoc诸如 MongoDB 之类的框架(并且可能无论如何都会修改您的数据结构)。如果这是通过网络发送的实际 5GB 有效负载,请考虑分页。此外,还有很多专门的工具可以监控内存和性能。
  • 你试过了吗?
  • @Mena 我知道“记忆的东西”听起来很糟糕,这不是我的决定:(我会考虑 MongoDB
  • @MPlatvoet 我可以尝试,但问题是我不知道我的 Json 的最大大小。也许它会在 5GB 的情况下工作,而在 10GB 的情况下会崩溃。这就是我问限制的原因
  • 向图书馆的开发人员问这个问题不是更好吗?

标签: java json jackson


【解决方案1】:

Jackson 的ObjectMapper 有一堆读取 JSON 的方法。

如果您使用带有byte[] 或String 的那些,那么您显然会受到这些类型的隐含限制的限制。

如果您使用带有File、InputStream 或Reader 的文件,则取决于它们的底层实现,您可以流式传输整个内容,而永远不会将文件的全部内容保存在内存中给定的时刻。

但是,ObjectMapper 必须在将其返回给调用者之前构建整个对象树。它将需要所需的任何内存量 在该树中构建对象。

Jackson 本身没有硬性限制。

【讨论】:

  • 我是 Jackson 和 Spring Boot 的新手。如果 Jackson 没有硬性限制,那么是什么阻止了我们在 Spring Boot 中通过 REST API 发送巨大的 JSON 文件?
  • @VikumDheemantha 如果您不限制用户输入,有很多事情需要担心。可以浪费服务器资源、带宽。此外,除非它是攻击者,否则正常的攻击者不应超过某些限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
  • 2023-04-10
  • 1970-01-01
  • 2013-02-24
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多