Maybe I am having a bad brain day, but I can't see how to get it to return an array as root. It assumes root state is a Hashtable. However I can see that I could write my own callback for it to do this for arrays.
Another suggested improvement is to strip any BOM characters in the stream as you go. We have had problems with some platforms inserting BOMs causing parser problems for the app. The workaround we did was read all into memory, strip them, then send to parser, but that defeats the whole point of a stream parser and wastes a lot of memory!!