std.jgrandson

w0rp via Digitalmars-d digitalmars-d at puremagic.com
Sun Aug 3 07:50:09 PDT 2014


On Sunday, 3 August 2014 at 07:16:05 UTC, Andrei Alexandrescu 
wrote:
> We need a better json library at Facebook. I'd discussed with 
> Sönke the possibility of taking vibe.d's json to std but he 
> said it needs some more work. So I took std.jgrandson to proof 
> of concept state and hence ready for destruction:
>
> http://erdani.com/d/jgrandson.d
> http://erdani.com/d/phobos-prerelease/std_jgrandson.html
>
> Here are a few differences compared to vibe.d's library. I 
> think these are desirable to have in that library as well:
>
> * Parsing strings is decoupled into tokenization (which is lazy 
> and only needs an input range) and parsing proper. Tokenization 
> is lazy, which allows users to create their own advanced (e.g. 
> partial/lazy) parsing if needed. The parser itself is eager.
>
> * There's no decoding of strings.
>
> * The representation is built on Algebraic, with the advantages 
> that it benefits from all of its primitives. Implementation is 
> also very compact because Algebraic obviates a bunch of 
> boilerplate. Subsequent improvements to Algebraic will also 
> reflect themselves into improvements to std.jgrandson.
>
> * The JSON value (called std.jgrandson.Value) has no named 
> member variables or methods except for __payload. This is so 
> there's no clash between dynamic properties exposed via 
> opDispatch.
>
> Well that's about it. What would it take for this to become a 
> Phobos proposal? Destroy.
>
>
> Andrei

I like it. Here's what I think about it.

* When I wrote my JSON library, the thing I wanted most was
constructors and opAssign functions for creating JSON values 
easily.
JSON x = "some string"; You have this, so it's great.
* You didn't include an 'undefined' value like vibe.d, which is a 
very
minor detail, but something I dislike. This is good.
* I'd just name Value either 'JSON' or 'JSONValue.' So you can 
just import the module without using aliases.
* opDispatch is kind of "meh" for JSON objects. It works until 
you hit a name clash with a UFCS function. I don't mind typing 
the extra three characters.

That's all I could think of really.


More information about the Digitalmars-d mailing list