I just published version 2.0 of my JSON parser library for Swift: json-swift. Version 2 brings in a lot of changes, mostly around RFC-7159 compliance and performance. As of this writing, I am not aware of any issues with the compliance tests.
As for performance, well, it’s gotten markedly faster! One of the test files I have is
large-dict.json. It’s about 26 megs and contains lot of various data in it. This took a really long time to parse, I believe around 14s. However, now we’re looking pretty good!
NSJONSerialization: performance results: min: 0.427, max: 0.484, avg: 0.446 JSONLib: performance results: min: 0.966, max: 1.060, avg: 0.985 Freddy Results: performance results: min: 0.875, max: 0.920, avg: 0.897
I put the comparison with Freddy in there too for good measure. There’s still a bit more I think can squeeze out, but there is a lot of retain/release overhead too that I need to figure out before I’ll be able to get down to beating
There are some breaking changes in this release as well, namely if you used the
hasValue properties. Those are now gone as the entire API surface has been changed to use
throws as the mechanism to promote errors. This cleaned up the code quite a bit and unified some of the concepts better.
This means that code like this:
json["hello"]["would"] would normally require
? at each index. However, I provided
Optional<JSValue> wrappers for all of those. This wasn’t possible in the early versions of Swift, so it was nice to clean up this design workaround.
Happy JSON parsing!
P.S. When Swift 4 becomes a bit more stabilized, I’ll be providing the
Decoder implementations to work with the new