[Libwebsockets] Lightweight JSON parser in C

Jack Mitchell ml at communistcode.co.uk
Fri Feb 22 16:53:13 CET 2013

On 22/02/13 15:28, "Andy Green (林安廸)" wrote:
> Hi -
> Is there any interest in a very lightweight but 100% correct JSON parser?
> I don't mean like you have in a browser where it goes through and 
> spawns objects for everything in the JSON. The idea is it is basically 
> a stateful stream reader, which can do something when the object path 
> it is on top of matches what you're interested in.
> It does not recurse, nor malloc anything. You call it with cursor 
> structs which start off zero'd and hold all parsing state. The cursor 
> structs have no pointers and may be copied. You can call the multiple 
> times with the same cursor as new JSON pieces come in and it will 
> parse on from the previous state; it's a bytewise parser so there are 
> no fragmentation issues. It means you don't need to hold the JSON all 
> at once anywhere but can still parse the whole JSON.
> So the style would be parse until the node of interest is held in the 
> cursor struct, then you can use a copy of that as a starting point for 
> rummaging around.
> I have the parser working - it is very lightweight, the cursor struct 
> is the only storage and it's < 256 bytes - but I am a bit stumped 
> about how to most flexibly expose the wanted results. I know what I 
> want it for and can hack that up easily, but I am wondering if there 
> are other real-world uses for very cheap JSON parsing in C... if so, 
> what does the JSON look like and what are the operations needed on it?
> -Andy
> _______________________________________________
> Libwebsockets mailing list
> Libwebsockets at ml.libwebsockets.org
> http://ml.libwebsockets.org/mailman/listinfo/libwebsockets

Hi Andy,

I have JSON parsing in my application and use the Jansson JSON Library 
to parse and manage it. A lot of what you said went over my head so I'm 
not sure if it would be applicable in my case, as I do a lot of parsing 
of the JSON and I also reply to the recieve method in JSON which I 
create on the fly.

If you want to poke into my use case then a few simple fairly specific 
questions would probably be enough to coax some useful information out 
of me ;)



   Jack Mitchell (jack at embed.me.uk)
   Embedded Systems Engineer


More information about the Libwebsockets mailing list