是否可以从常量 space 的流中解析和使用 aeson 解析器的结果?

is it possible to parse and consume the results of an aeson parser from a stream in constant space?

注意fromJson returns一个结果一个,可以是一个错误字符串成功

如果我在流上使用 fromJson(例如,response from http-streams using the expression parseFromStream (fromJSON <$> json') ) (link),结果上的模式匹配是否会强制整个流首先完全缓冲,以便解析确定成功或失败,无论响应的进一步消耗是否足够惰性(即常量-space解析+消耗是不可能的)?或者,两者 解析和结果被延迟消耗,即常量-space 解析+消耗 可能)?文档 sau "parseFromStream consumes only as much input as necessary to satisfy the Parser",但不清楚 "satisfing the Parser" 如何与结果上的模式匹配相关以产生成功或错误。

(P.S。或者,这是不可能的,是否有不同的方式允许常量-space 解析 w/消费?)

不幸的是,一般情况下没有办法做到这一点。我在编写 xml-conduit 时采用的方法是让解析器解析出单独的 事件 ,例如 "element begin" 和 "element end." 我在过去有一个类似的 Haskell 库用于 JSON 数据。

实际上有这样的东西可用作 C 库绑定:yajl

我刚刚粗略地完成了一个 json 进行增量解析的解析器。结果和输入都可以延迟消费,它是常数 space 尽可能常数 space 是可能的。看看这是否对您有帮助: https://github.com/ondrap/json-stream