Update
I've written a small class that does char-by-char JSON input parsing..
https://github.com/janeklb/JSONCharInputReader
Fresh off the presses so it's probably got a few bugs.. if you decide to try it out, let me know!
--
Could you (while keeping track of '{', '[', ']', '}' scope) break the stream up on each comma that's not part of a string value?
And then process each token using json_decode()?
This solution would work best if the json stream didn't have a lot of large objects (as they would only be parsed once they've arrived in full).
Edit: if it does have large objects, this strategy could be modified to look a little 'deeper' instead.. but the complexity here would shoot up.