Performance of std.json

Chris Williams via Digitalmars-d digitalmars-d at puremagic.com
Mon Jun 2 12:05:13 PDT 2014


On Monday, 2 June 2014 at 00:39:48 UTC, Jonathan M Davis via 
Digitalmars-d wrote:
> I know that vibe.d uses its own json implementation, but I 
> don't know
> how much of that is part of its public API and how much of that 
> is
> simply used internally: http://vibed.org

In general, I've been pretty happy with vibe.d, and I've heard 
that the parser speed of the JSON implementation is good. But I 
must admit that I found the API to be fairly obtuse. In order to 
do much of anything, you really need to serialize/deserialize 
from structs. The JSON objects themselves are pretty impossible 
to modify.

I haven't looked at how vibe's parser works, but any very-fast 
parser would probably need to support an input stream, so that it 
can build out data in parallel to I/O, and do a lot of manual 
memory management. E.g. you probably want a stack of reusable 
node buffers that you use to add elements to as you scan the JSON 
tree, then clone off purpose-sized nodes from the work buffers 
when you encounter the end of the definition. Whereas, the 
current implementation in std.json only accepts a complete string 
and for each node starts with no memory and has to 
allocate/reallocate for every fresh piece of information.

Having worked with JSON libraries quite a bit, the key to a good 
one is the ability to refer to paths through the data. So besides 
the JSON objects themselves, you need something like a "struct 
JPath" that represents an array of strings and size_ts, which you 
can pass into get, set, has, and count methods. I'd view the lack 
of that as the larger issue with the current JSON implementations.


More information about the Digitalmars-d mailing list