aeson icon indicating copy to clipboard operation
aeson copied to clipboard

Expose Data.Aeson.Encoding.Builder

Open alexbiehl opened this issue 7 years ago • 3 comments

At work we have a JSON schema which demands composite keys for objects of this form:

"<some integer>_<day>": ... 

Now, we used the venerable toKey (n, d) = Text.pack (show n ++ '_' ++ show d) but this turned out out to show up in our profiling and really was taking 10% of our overall runtime! So we went for some cruel hack:

     toKey (n ,d) = Encoding.unsafeToEncoding $
           Builder.char7 '"' <> Builder.intDec r <> Builder.char7 '_'
        <> Encoding.fromEncoding (Encoding.day d) <>  Builder.char7 '"'

Unfortunately this results in invalid JSON as Encoding.day is wrapped into quotes! It would be really neat if we could access the unsafe stuff from Data.Aeson.Encoding.Builder to use the Day encoding without quotes.

alexbiehl avatar May 24 '18 08:05 alexbiehl

(Or in general allow efficient encoding of this composite keys)

alexbiehl avatar May 24 '18 08:05 alexbiehl

Hey, sorry I missed this!

Exporting this in some way sounds good. I wonder if the module should be suffixed with Unsafe or Internal?

bergmark avatar Jul 06 '18 17:07 bergmark

It might be nice to expose the date/time encoders as a separate package like you did with the parsers. Perhaps iso8601-builder?

gridaphobe avatar Aug 05 '18 20:08 gridaphobe