Fetching contributors…
Cannot retrieve contributors at this time
456 lines (373 sloc) 24 KB

JSON Framework Changes

Version 3.1alpha3 (October 17th, 2011)

Support for Automatic Reference counting now that Xcode 4.2 is officially released. Note that this release requires ARC to avoid leaking memory. Fixes Issue #79, Issue #82, Issue #101, and Issue #103.

Version 3.1alpha2 (August 28th, 2011)

  • Revert fix to Issue 83. People are already using the low-level protocol.
  • Issue 88: Fix parsing of -0 into the integer 0.
  • Issue 86: Make framework compile on Leopard.
  • Issue 91: Fix leak of error string in certain situations.

Version 3.1alpha1 (July 30th, 2011)

  • Issue 9: Improve writing speed in samsoffes' benchmark.
  • Issue 79: Automatic Reference Counting (ARC) Support.

Version 3.0.2 (July 27th, 2011)

  • Issue 88: Fix parsing of -0 into the integer 0.
  • Issue 86: Make framework compile on Leopard.

Version 3.0.1 (July 1st, 2011)

  • Issue 80: Kill memory leak reported by DinosaurDad.
  • Fix typo in Readme

Version 3.0 (June 18th, 2011)

  • Bump version number

Version 3.0beta3 (June 11th, 2011)


  • Fleshed out the API documentation.
  • Remove the (admittedly rather cool) JavaScript hack from the Contrib directory, as I don't want to get stuck maintaining JavaScript I don't understand after 3.0.
  • Moved content of Installation file to Readme.
  • Issue 73: Project rename, to avoid clashing with Apple's internal JSON.framework
    • Renamed Mac framework to SBJson.framework
    • Renamed iOS static lib to sbjson-ios.
    • Changed name of main header to be SBJson.h rather than JSON.h. A backward compatibility header is included, but this will be removed in the future.
  • Expanded the Mac example app to be a fully functional application that reformats JSON you put into a text field.
  • Removed the header indirection hack by making more headers public.
  • Detect if NSCache is available and only use it if it is. This lets us support iOS versions prior to 4.0.

Bug Fixes

  • Issue 43: Don't crash on parsing broken UTF8.
  • Issue 70: SBStateStack breaks when running with GC. This was fixed by removing it and just using an NSMutableArray. This turns out to have very little measurable effect on performance.

Version 3.0beta2 (May 24th, 2011)


  • The parser used to always return NSMutableStrings, but may now return NSString instead, for strings with no escapes in them. This change speeded up the parser by about 30% on samsoffes' benchmark.
  • Recent refactoring to clean up the code had negative impact on the performance in samsoffes' comparative benchmark. Most of this was reclaimed, but we are still a bit slower than beta1 in his test. Particularly for writing. (We are, however, not slowest.)


  • Issue 40: Remove unnecessary script phase build
  • Issue 55: SBJsonStreamWriter stringCache is now using NSCache instead of NSMutableDictionary. This firstly means it is now thread-safe, and secondly that it will free up memory automatically if the OS requests it.

Bug Fixes

  • Issue 64: Handle really long integers better.
  • Issue 66: Parser fails to ignore trailing garbage
  • Issue 42: Fix bug in handling of Unicode Surrogate Pairs.
  • Issue 48: Increase precision when writing floating-point numbers so NSTimeInterval instances since epoch can be represented fully.

Version 3.0beta1 (January 30th, 2011)

Bug Fixes

  • Issue 36: Fix bug in build script that caused it to break if $SRCROOT has spaces.


  • Remove the hacky dataToHere method in favour of just exposing the internal NSMutableData buffer.
  • Added a minimal Mac example project showing how to link to an external JSON framework rather than copying the sources into your project.

Version 3.0alpha3 (January 2nd, 2011)

  • Added documentation to the TwitterStream sample project.
  • Fixed a few warnings, bugs & a memory leak reported by Andy Warwick.

Version 3.0alpha2 (December 28th, 2010)


  • Minor changes to formatting when the HumanReadable flag is set. Empty arrays and objects are no longer special-cased to appear on a single line. The separator between key and value in an object has changed to ': ' rather than ' : '.
  • Issue 25: Simplified error handling.

New Features

  • Issue 16: Added support for parsing a UTF8 data stream. This means you can start parsing huge documents before it's all downloaded. Supports skipping the outer-most layer of huge arrays/objects or parsing multiple whitespace-separated completed documents.
  • Issue 12: Added support for writing JSON to a data stream. This means you can write huge JSON documents to disk, or an HTTP destination, without having to hold the entire structure in memory. You can even generate it as you go, and just stream snapshots to an external process.
  • Issue 18 & 27: Re-orient API to be NSData-based. The NSString-oriented API methods now delegates to this.


  • Issue 9: Improve performance of the SBJsonWriter. This implementation is nearly twice as fast as 2.3.x on Sam Soffes' benchmarks.
  • Issue 30: Added TwitterStream example project showing how to interact with Twitter's multi-document stream. (See Examples/TwitterStream in the distribution.)

Version 2.3.1 (September 25th, 2010)


  • Move to host releases on Github rather than Google code.
  • Renamed .md files to .markdown.
  • Removed bench target--use Sam Soffes's benchmarks instead.
  • Releases are no longer a munged form of the source tree, but identical to the tagged source.

Bug fixes

  • Issue 2: Linkage not supported by default distribution.
  • Issue 4: Writer reported to occasionally fail infinity check.
  • Issue 8: Installation.markdown refers to missing JSON folder.

Version 2.3 (August 7, 2010)

  • Renamed to
  • Updated version number

Version 2.3beta1 (July 31, 2010)


  • Parsing performance improvements. Issue 56: Dewvinci & Tobias Höhmann came up with a patch to improve parsing of short JSON texts with lots of numbers by over 60%.
  • Refactored tests to be more data-driven. This should make the source leaner and easier to maintain.
  • Removed problematic SDK Issue 33, 58, 63, and 64: The vast majority of the issues people are having with this framework were related to the somewhat mystical Custom SDK. This has been removed in this version.
  • Removed the deprecated SBJSON facade Issue 71: You should use the SBJsonParser or SBJsonWriter classes, or the category methods, instead. This also let us remove the SBJsonParser and SBJsonWriter categories; these were only there to support the facade, but made the code less transparent.
  • Removed the deprecated fragment support Issue 70: Fragments were a bad idea from the start, but deceptively useful while writing the framework's test suite. This has now been rectified.

Bug Fixes

  • Issue 38: Fixed header-inclusion issue.
  • Issue 74: Fix bug in handling of Infinity, -Infinity & NaN.
  • Issue 68: Fixed documentation bug

Version 2.2.3 (March 7, 2010)

  • Added -all_load to libjsontests linker flags. This allows the tests to run with more recent versions of GCC.
  • Unable to do a JSONRepresentation for a first-level proxy object. Issue 54 & 60: Allow the -proxyForJson method to be called for first-level proxy objects, in addition to objects that are embedded in other objects.

Version 2.2.2 (September 12, 2009)

  • Fixed error-reporting logic in category methods. Reported by Mike Monaco.
  • iPhone SDK built against iPhoneOS 3.0. This has been updated from 2.2.1.

Version 2.2.1 (August 1st, 2009)

  • Added svn:ignore property to build directory. Requested by Rony Kubat.
  • Fixed potential corruption in category methods. If category methods were used in multiple threads they could potentially cause a crash. Reported by dprotaso / Relium.

Version 2.2 (June 6th, 2009)

No changes since 2.2beta1.

Version 2.2beta1 (May 30th, 2009)

  • Renamed method for custom object support Renamed the -jsonRepresentationProxy method to -proxyForJson.

Version 2.2alpha5 (May 25th, 2009)

  • Added support for custom objects (generation only) Added an optional -jsonRepresentationProxy method that you can implement (either directly or as category) to enable JSON.framework to create a JSON representation of any object type. See the Tests/ProxyTest.m file for more information on how this works.
  • Moved maxDepth to SBJsonBase Throw errors when the input is nested too deep for writing json as well as parsing. This allows us to exit cleanly rather than break the stack if someone accidentally creates a recursive structure.

Version 2.2alpha4 (May 21st, 2009)

  • Renamed protocols and moved method declarations Renamed SBJsonWriterOptions and SBJsonParserOptions protocols to be the same as their primary implementations and moved their one public method there.
  • Implemented proxy methods in SBJSON This facade now implements the same methods as the SBJsonWriter and SBJsonParser objects, and simply forwards to them.
  • Extracted private methods to private protocol Don't use these please.
  • Improved documentation generation Classes now inherit documentation from their superclasses and protocols they implement.

Version 2.2alpha3 (May 16th, 2009)

  • Reintroduced the iPhone Custom SDK For the benefit of users who prefer not to copy the JSON source files into their project. Also updated it to be based on iPhoneOS v2.2.1.
  • Deprecated methods for dealing with fragments Tweaked the new interface classes to support the old fragment-methods one more version.

Version 2.2alpha2 (May 11th, 2009)

  • Added a Changes file. So people can see what the changes are for each version without having to go to the project home page.
  • Updated Credits. Some people that have provided patches (or other valuable contributions) had been left out. I've done my best to add those in. (If you feel that you or someone else are still missing, please let me know.)
  • Removed .svn folders from distribution. The JSON source folder had a .svn folder in it, which could have caused problems when dragging it into your project.

Version 2.2alpha1 (May 10th, 2009)

  • Improved installation instructions, particularly for the iPhone. Getting the SDK to work properly in all configurations has proved to be a headache. Therefore the SDK has been removed in favour of instructions for simply copying the source files into your project.
  • Split the SBJSON class into a writer and parser class. SBJSON remains as a facade for backwards compatibility. This refactoring also quashed warnings reported by the Clang static analyser.
  • Improved interface for dealing with errors. Rather than having to pass in a pointer to an NSError object, you can now simply call a method to get the error stack back if there was an error. (The NSError-based API remains in the SBJSON facade, but is not present in the new classes.)
  • Documentation updates. Minor updates to the documentation.

Release notes for earlier releases can be found here: