用于 YAJL (Yet Another JSON Library) C 库的 Objective-C 绑定
The YAJL framework is an Objective-C framework for the YAJL SAX-style JSON parser.
pod "YAJLO"
You can use The Swift Package Manager to install yajl-objc by adding the proper description to your Package.swift file:
// swift-tools-version:5.5
import PackageDescription
let package = Package(
name: "YOUR_PROJECT_NAME",
dependencies: [
.package(url: "https://github.com/gabriel/yajl-objc.git", from: "0.3.4"),
]
)
#import
#import
#import
#import
NSData *JSONData = [NSData dataWithContentsOfFile:@"example.json"];
NSArray *arrayFromData = [JSONData yajl_JSON];
NSString *JSONString = @"[1, 2, 3]";
NSArray *arrayFromString = [JSONString yajl_JSON];
// With options and out error
NSString *JSONString = @"[1, 2, 3] // Allow comments";
NSError *error = nil;
NSArray *arrayFromString = [JSONString yajl_JSONWithOptions:YAJLParserOptionsAllowComments error:&error];
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"value" forKey:@"key"];
NSString *JSONString = [dict yajl_JSONString];
// ==> {"key":"value"}
// Beautified with custon indent string
NSArray *array = [NSArray arrayWithObjects:@"value1", @"value2", nil];
NSString *JSONString = [dict yajl_JSONStringWithOptions:YAJLGenOptionsBeautify indentString:@" "];
…
There are options when parsing that can be specified with initWithParserOptions: (YAJLParser).
YAJLParserOptionsAllowComments: Allows comments in JSONYAJLParserOptionsCheckUTF8: Will verify UTF-8YAJLParserOptionsStrictPrecision: Will force strict precision and return integer overflow error, if number is greater than long long. YAJLParser *parser = [[YAJLParser alloc] init];
parser.delegate = self;
// A chunk of data comes...
YAJLParserStatus status = [parser parse:chunk1];
// 'status' should be YAJLParserStatusInsufficientData, if its not finished
if (parser.parserError)
NSLog(@"Error:\n%@", parser.parserError);
// Another chunk of data comes...
YAJLParserStatus status = [parser parse:chunk2];
// 'status' should be YAJLParserStatusOK if its finished
if (parser.parserError)
NSLog(@"Error:\n%@", 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:YAJLParserOptionsNone error:&error];
// Access root element at document.root
NSLog(@"Root: %@", document.root);
…
id JSONValue = [[NSBundle mainBundle] yajl_JSONFromResource:@"kegs.json"];
To implement JSON encodable value for custom objects or override for existing objects, implement - (id)JSON;
For example:
@interface CustomObject : NSObject
@end
@implementation CustomObject
- (id)JSON {
return [NSArray arrayWithObject:[NSNumber numberWithInteger:1]];
}
@end
暂无开放 Issues,或尚未同步最近议题。