YAJL.framework is an Objective-C wrapper around the YAJL SAX-style JSON parser.
YAJL-0.2.5.zip YAJL.framework (2009/07/23)
libYAJLIPhone-0.2.5.zip Static Library for iPhone OS 3.0 Simulator & Device
There are two options. You can install it globally in /Library/Frameworks or with a little extra effort embed it with your project.
- Copy
YAJL.framework
to/Library/Frameworks/
- In the target Info window, General tab:
- Add a linked library, under
Mac OS X 10.5 SDK
section, selectYAJL.framework
- Add a linked library, under
- Copy
YAJL.framework
to your project directory (maybe in MyProject/Frameworks/.) - Add the
YAJL.framekwork
files (from MyProject/Frameworks/) to your target. It should be visible as aLinked Framework
in the target. - Under Build Settings, add
@loader_path/../Frameworks
toRunpath Search Paths
- Add
New Build Phase
|New Copy Files Build Phase
.- Change the Destination to
Frameworks
. - Drag
YAJL.framework
into the the build phase - Make sure the copy phase appears before any
Run Script
phases
- Change the Destination to
Coming soon!
To use the streaming (or SAX style) parser, use YAJLParser
.
NSData *data = [NSData dataWithContentsOfFile:@"example.json"];
YAJLParser *parser = [[YAJLParser alloc] initWithParserOptions:YAJLParserOptionsAllowComments];
parser.delegate = self;
[parser parse:data];
if (parser.parserError) {
NSLog(@"Error:\n%@", parser.parserError);
}
parser.delegate = nil;
[parser release];
// Include delegate methods from YAJLParserDelegate
/*
- (void)parserDidStartDictionary:(YAJLParser *)parser;
- (void)parserDidEndDictionary:(YAJLParser *)parser;
- (void)parserDidStartArray:(YAJLParser *)parser;
- (void)parserDidEndArray:(YAJLParser *)parser;
- (void)parser:(YAJLParser *)parser didMapKey:(NSString *)key;
- (void)parser:(YAJLParser *)parser didAdd:(id)value;
*/
YAJLParser *parser = [[[YAJLParser alloc] initWithParserOptions:0] autorelease];
parser.delegate = self;
// A chunk of data comes...
YAJLParserStatus status = [parser parse:chunk1];
// 'status' should be YAJLParserStatusInsufficientData, if its not finished
if (parser.parserError) ...;
// Another chunk of data comes...
YAJLParserStatus status = [parser parse:chunk2];
// 'status' should be YAJLParserStatusOK if its finished
if (parser.parserError) ...;
To use the document style, use YAJLDocument
. Usage should be very similar to NSXMLDocument
.
NSData *data = [NSData dataWithContentsOfFile:@"example.json"];
NSError *error = nil;
YAJLDocument *document = [[YAJLDocument alloc] initWithData:data parserOptions:0 error:&error];
// Access root element at document.root
NSLog(@"Root: %@", document.root);
[document release];
Or stream to the document:
YAJLDocument *document = [[YAJLDocument alloc] initWithWithParserOptions:YAJLParserOptionsNone];
NSError *error = nil;
[document parse:chunk1 error:error];
[document parse:chunk2 error:error];
// Access root element at document.root
NSLog(@"Root: %@", document.root);
[document release];