software and other stuff.

YAJL

Yet Another JSON Library. YAJL is a small event-driven (SAX-style) JSON parser written in ANSI C, and a small validating JSON generator. YAJL is released under the BSD license.

documentation

Generated with doxygen from the source, available here .

download & SVN

0.4.0 released on 05/01/2008! (may day! may day!)

All source code has been moved to code.google.com for easier access and issue reporting.

features

Simple Interface

Largely because YAJL is event driven, the interface is very concise object oriented C. The interface is not cluttered with data representation, that bit is left up to higher level code. Indeed it should be possible to port most existing JSON libraries onto YAJL if so desired.

portable

It's all ANSI C. It's been successfully compiled on debian linux, OSX 10.4 i386 & ppc, OSX 10.5 i386, winXP, FreeBSD 4.10, FreeBSD 6.1 amd64, FreeBSD 7 i386, and windows vista. More platforms and binaries as time permits.

Stream parsing

YAJL remembers all state required to support restarting parsing. This allows parsing to occur incrementally as data is read off a disk or network.

Fast

A second motivation for writing YAJL, was that many available free JSON parsers fall over on large or complex inputs. YAJL is careful to minimize memory copying and input re-scanning when possible. The result is a parser that should be fast enough for most applications or tunable for any application. On my mac pro (2.66 ghz) it takes 1s to verify a 60meg json file. Minimizing that same file with json_reformat takes 4s.

Low resource consumption

Largely because YAJL deals with streams, it's possible to parse JSON in low memory environments. Oftentimes with other parsers an application must hold both the input text and the memory representation of the tree in memory at one time. With YAJL you can incrementally read the input stream and hold only the in memory representation. Or for filtering or validation tasks, it's not required to hold the entire input text in memory.

sample programs

included in the source are a couple sample programs to demonstrate and test yajl:
json_reformat: a minimizer and beautifier in one.
json_verify: a JSON verifier.

comments in JSON

If you're dead set on using JSON throughout your system, you'll probably end up using it for your configuration files too. A little crazy, perhaps. But so am I. At parser allocation time you may specify a configuration parameter to allow comments inside the JSON input text. This is supported in versions 0.2.0 and above.

Warts and TODO

YAJL builds using CMake. This isn't the norm for open source, so I expect to hear some complaints. The generator is functional, but needs a bit of polish. I'm sure there are a couple bugs left. I'll eagerly accept patches along with input text which demonstrates problems.

contact

lloyd At lloydforge d0t org