Last spring some colleagues and I wrote a properly streaming Json parser that could incrementally emit Json primitive values as its fed bytestrings. 

There's some Corner cases that come up wrt how atto parsecs float parser parses 0.0 as two different zero literals depending on how it's split between chunks, but that aside its a pretty simple stack machine implementation that worked out pretty well 

On Sunday, May 29, 2016, Ryan Newton <rrnewton@gmail.com> wrote:
Thanks, I'll have to try it and see if the Parser [Value] can enable streaming/incremental IO.


On Sun, May 29, 2016 at 1:23 PM, Sanae <uguu@installgentoo.com> wrote:
You could drop down to the attoparsec layer, but instead of messing with IResults, use it to make another parser that will parse all the objects in the file.

E.g.  json `sepBy` skipSpace :: Parser [Value]

sepBy and skipSpace both taken from Data.Attoparsec.Text

On Sun, 2016-05-29 at 13:09 -0400, Ryan Newton wrote:
As someone who spent many years putting data in S-expression format, it seems natural to me to write multiple S-expressions (or JSON objects) to a file, and expect a reader to be able to read them back one at a time.

This seems comparatively uncommon in the JSON world.  Accordingly, it looks like the most popular JSON parsing lib, Aeson, doesn't directly provide this functionality.  Functions like decode just return a "Maybe a", not the left-over input, meaning that you would need to somehow split up your multi-object file before attempting to parse, which is annoying and error prone.

It looks like maybe you can get Aeson to do what I want by dropping down to the attoparsec layer and messing with IResult.

But is there a better way to do this?  Would this be a good convenience routine to add to aeson in a PR?  I.e. would anyone else use this?

Thanks,
  -Ryan


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe