[Haskell-cafe] JSON parser that returns the rest of the string that was not used

Carter Schonwald carter.schonwald at gmail.com
Mon May 30 00:18:08 UTC 2016


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 at 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 at installgentoo.com
> <javascript:_e(%7B%7D,'cvml','uguu at 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 listHaskell-Cafe at haskell.org <javascript:_e(%7B%7D,'cvml','Haskell-Cafe at haskell.org');>http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>>
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
>> <javascript:_e(%7B%7D,'cvml','Haskell-Cafe at haskell.org');>
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20160529/ba378337/attachment.html>


More information about the Haskell-Cafe mailing list