【问题标题】:Read large blobs from json stream从 json 流中读取大块
【发布时间】:2018-04-14 06:42:41
【问题描述】:

我需要使用包含大量数据(但节点不多)的 JSON 流,例如:

{
  "meta": {
    "status": "ok"
  },
  "items": [
    {
      "name": "name of item 1",
      "data": "In reality this could be a really long string of several hundred MB."
    }
  ]
}

在读取此 JSON 流时,我想在数据传入时处理 data 字符串,而无需将整个字符串保存在内存中。

Json.NET 有一个JsonReader 类,它允许在节点进入时对其进行解码,但它将整个 节点保留在内存中。

有没有办法通过 Json.NET 实现我想要的,或者是否有另一个 JSON 库可以做到这一点(必须与 .Net Core 兼容)?

注意:对于 XML,这可以使用 System.Xml.XmlReader 类解决,该类作为 ReadValueChunkAsync 方法允许从传入流中读取大块数据。

【问题讨论】:

    标签: c# json asynchronous stream json.net


    【解决方案1】:

    您的问题听起来像是图书馆的一部分,因为它非常特殊。 JSON 的大小问题通常来自处理巨大的数组,在 Newtonsoft.JSON 中存在解决方案(即将 StreamReader 传递给 JsonReader)。

    这对你有帮助吗?

    http://www.drdobbs.com/windows/parsing-big-records-with-jsonnet/240165316

    【讨论】:

    • 我看到了 drdobbs 的那篇文章。它解释了如何从流中读取节点,而不是如何读取块中的值。
    • 在发件人端修复它是一种选择吗?在 JSON 对象中包含导致内存不足异常的字符串似乎是一个巨大的危险信号。无论您在接收方找到什么解决方案,在发送方解决它都是最不“hacky”的方式。
    • 我同意 JSON 是一种非常糟糕的格式来传输这种数据。但不幸的是,我不拥有发送方。
    猜你喜欢
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多