| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- **********************************************************************
- This is YAJL 2, for the legacy version of YAJL. see
- https://github.com/lloyd/yajl/tree/1.x
- **********************************************************************
- Welcome to Yet Another JSON Library (YAJL)
- ## Why does the world need another C library for parsing JSON?
- Good question. In a review of current C JSON parsing libraries I was
- unable to find one that satisfies my requirements. Those are,
- 0. written in C
- 1. portable
- 2. robust -- as close to "crash proof" as possible
- 3. data representation independent
- 4. fast
- 5. generates verbose, useful error messages including context of where
- the error occurs in the input text.
- 6. can parse JSON data off a stream, incrementally
- 7. simple to use
- 8. tiny
- Numbers 3, 5, 6, and 7 where particularly hard to find, and were what
- caused me to ultimately create YAJL. This document is a tour of some
- of the more important aspects of YAJL.
- ## YAJL is Free.
- Permissive licensing means you can use it in open source and
- commercial products alike without any fees. My request beyond the
- licensing is that if you find bugs drop me a email, or better yet,
- fork and fix.
- Porting YAJL should be trivial, the implementation is ANSI C. If you
- port to new systems I'd love to hear of it and integrate your patches.
- ## YAJL is data representation independent.
- BYODR! Many JSON libraries impose a structure based data representation
- on you. This is a benefit in some cases and a drawback in others.
- YAJL uses callbacks to remain agnostic of the in-memory representation.
- So if you wish to build up an in-memory representation, you may do so
- using YAJL, but you must bring the code that defines and populates the
- in memory structure.
- This also means that YAJL can be used by other (higher level) JSON
- libraries if so desired.
- ## YAJL supports stream parsing
- This means you do not need to hold the whole JSON representation in
- textual form in memory. This makes YAJL ideal for filtering projects,
- where you're converting YAJL from one form to another (i.e. XML). The
- included JSON pretty printer is an example of such a filter program.
- ## YAJL is fast
- Minimal memory copying is performed. YAJL, when possible, returns
- pointers into the client provided text (i.e. for strings that have no
- embedded escape chars, hopefully the common case). I've put a lot of
- effort into profiling and tuning performance, but I have ignored a
- couple possible performance improvements to keep the interface clean,
- small, and flexible. My hope is that YAJL will perform comparably to
- the fastest JSON parser out there.
- YAJL should impose both minimal CPU and memory requirements on your
- application.
- ## YAJL is tiny.
- Fat free. No whip.
- enjoy,
- Lloyd - July, 2007
|