是否有可能从恒定空间中的流中解析和使用aeson解析器的结果?

时间:2015-03-20 04:33:50

标签: parsing haskell streaming aeson

请注意 fromJson 会返回结果,可以是错误字符串成功

如果我在流上使用fromJson(例如,来自http-streams的response使用表达式parseFromStream (fromJSON <$> json')(link),则会对结果强制进行模式匹配完全首先缓冲整个流,以便解析成功或失败,无论进一步消耗的响应是否足够懒惰(即恒定空间解析+消费不可能)?或者,两者解析和结果是否可以懒散地消耗,即恒定空间解析+消费 可能?)?文档sau&#34; parseFromStream只消耗尽可能多的输入以满足Parser&#34;但是它不清楚如何满足Parser&#34;涉及结果上的模式匹配以产生成功或错误。

(P.S。或者,它是不可能的,是否有一种不同的方式允许消耗的常量空间解析?)

2 个答案:

答案 0 :(得分:2)

不幸的是,一般来说,没有办法做到这一点。我在编写xml-conduit时采用的方法是让解析器解析单个事件,例如&#34; element begin&#34;和&#34;元素结束。&#34;我过去多次考虑过为JSON数据提供类似的Haskell库。

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

答案 1 :(得分:0)

我刚刚完成了一个执行增量解析的json解析器。结果和输入都可以懒散地消耗,只要是恒定的空间就可以是恒定的空间。看看这是否有助于你: https://github.com/ondrap/json-stream