Skip to content
This repository has been archived by the owner on Jul 11, 2019. It is now read-only.

Latest commit

 

History

History
74 lines (52 loc) · 2.49 KB

README.md

File metadata and controls

74 lines (52 loc) · 2.49 KB

TypeJSON

A simple JSON parsing library that aims to adhere to the JSON spec with a sprinkle of type safety.

Goals

  • Keep in touch with the structure and limitations of JSON. It's pretty simple.
  • Take advantage of the type-system to help avoid bugs without adding too much effort.
  • Allow you to index into objects and arrays without performing type-checks at each step.

Usage

Parse some JSON

NSData *profileData = [@"{ \"name\": \"Mickey Mouse\", \"details\": { \"age\": 102, \"species\": \"mouse\" }, \"animated\": true, \"friends\": [\"Minnie\", \"Goofy\", \"Donald\"] }" dataUsingEncoding:NSUTF8StringEncoding];
TypeJSON *profileJSON = [TypeJSON fromData:data];

Access values with subscript notation and type coersion

NSString *mickeysName = profileJSON["name"].asString;
BOOL isAnimated = profileJSON["animated"].isTrue;
NSInteger mickeysAge = profileJSON["details"]["age"].asNumber.integerValue;
NSString *mickeysSpecies = profileJSON["details"]["species"].asString;
NSString *mickeysFirstFriendsName = profileJSON["friends"][0].asString;

Handle errors when data shape does not meet assumptions

JSON *minniesNameJSON = profileJSON["friends"][0]["name"]; // => JSON
NSString *minniesName = minniesNameJSON.asString; // => nil
NSError *minniesNameError = minniesNameJSON.asError; // => NSError(domain: JSON, code: 422)
NSString *mickeysLocation = profileJSON["location"].asError; // => NSError(domain: JSON, code: 404)

Perform explicit type-checking when data type is not known in advance

profileJSON.isObject; // => YES
profileJSON["name"].isString // => YES
profileJSON["animated"].isString // => NO
profileJSON["animated"].isTrue // => YES

Serialize values back to JSON data

NSData *profileData = profileJSON.asJSON; // => { "name": "Mickey Mouse", "details": { "age": 102, "species": "mouse" }, "animated": true, "friends": ["Minnie", "Goofy", "Donald"] } as NSData
NSData *detailsData = profileJSON["details"].asJSON; // => { "age": 102, "species": "mouse" } as NSData

Create JSON from scratch

TypeJSON *myJSON = [TypeJSON emptyObject];
// TODO: Mutator methods

TODO

Some missing features include:

  • Add setters that allow you to construct JSON
  • Implement copy-on-write—or at least avoid creating new objects in -objectForKeyedSubscript: and -objectAtIndexedSubscript:

Inspiration

License

Standard MIT license. Enjoy.