• Stars
    star
    670
  • Rank 67,354 (Top 2 %)
  • Language
    C
  • License
    Other
  • Created over 15 years ago
  • Updated about 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Objective-C bindings for YAJL (Yet Another JSON Library) C library

YAJL Framework

The YAJL framework is an Objective-C framework for the YAJL SAX-style JSON parser.

Features

  • Stream parsing, comments in JSON, better error messages.
  • Parse directly from NSString or NSData.
  • Generate JSON from default or custom types.
  • Properly handles large numeric types.
  • Document style parser.
  • Error by exception or out error.

Integration

CocoaPods

pod "YAJLO"

Swift Package Manager

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"),
    ]
)

Usage

#import <YAJLO/NSObject+YAJL.h>
#import <YAJLO/YAJLDocument.h>
#import <YAJLO/YAJLGen.h>
#import <YAJLO/YAJLParser.h>

To parse JSON from NSData

NSData *JSONData = [NSData dataWithContentsOfFile:@"example.json"];
NSArray *arrayFromData = [JSONData yajl_JSON];

To parse JSON from NSString

NSString *JSONString = @"[1, 2, 3]";
NSArray *arrayFromString = [JSONString yajl_JSON];

To parse JSON from NSString with error and comments

// With options and out error
NSString *JSONString = @"[1, 2, 3] // Allow comments";
NSError *error = nil;
NSArray *arrayFromString = [JSONString yajl_JSONWithOptions:YAJLParserOptionsAllowComments error:&error];

To generate JSON from an object, NSArray, NSDictionary, etc.

NSDictionary *dict = [NSDictionary dictionaryWithObject:@"value" forKey:@"key"];
NSString *JSONString = [dict yajl_JSONString];
// ==> {"key":"value"}

To generate JSON from an object, beautified with custom indent

// Beautified with custon indent string
NSArray *array = [NSArray arrayWithObjects:@"value1", @"value2", nil];
NSString *JSONString = [dict yajl_JSONStringWithOptions:YAJLGenOptionsBeautify indentString:@"    "];

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;

// 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 { }

Parser Options

There are options when parsing that can be specified with initWithParserOptions: (YAJLParser).

  • YAJLParserOptionsAllowComments: Allows comments in JSON
  • YAJLParserOptionsCheckUTF8: Will verify UTF-8
  • YAJLParserOptionsStrictPrecision: Will force strict precision and return integer overflow error, if number is greater than long long.

Parsing as data becomes available

 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);

Document style parsing

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);

Document style parsing as data becomes available

 YAJLDocument *document = [[YAJLDocument alloc] init];
 document.delegate = self;

 NSError *error = nil;
 [document parse:chunk1 error:error];
 [document parse:chunk2 error:error];

 // You can access root element at document.root
 NSLog(@"Root: %@", document.root);

 // Or via the YAJLDocumentDelegate delegate methods

 - (void)document:(YAJLDocument *)document didAddDictionary:(NSDictionary *)dict { }
 - (void)document:(YAJLDocument *)document didAddArray:(NSArray *)array { }
 - (void)document:(YAJLDocument *)document didAddObject:(id)object toArray:(NSArray *)array { }
 - (void)document:(YAJLDocument *)document didSetObject:(id)object forKey:(id)key inDictionary:(NSDictionary *)dict { }

Load JSON from Bundle

id JSONValue = [[NSBundle mainBundle] yajl_JSONFromResource:@"kegs.json"];

Customized Encoding

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

More Repositories

1

CaptureRecord

User + Screen Recording iOS SDK
Objective-C
342
star
2

GHKit

Utilities and categories for Objective-C
Objective-C
260
star
3

as3httpclient

HTTP Client for AS3
ActionScript
243
star
4

ffmpeg-iphone-build

Build scripts for building ffmpeg on iPhone
Shell
221
star
5

MPMessagePack

MessagePack implementation for Objective-C / msgpack.org[Objective-C]
Objective-C
179
star
6

capitate

Capistrano recipes, plugins and templates.
Ruby
78
star
7

NAChloride

Libsodium for Objective-C
Objective-C
67
star
8

font-detect-js

Font detection using Javascript and Flash
HTML
64
star
9

xcode-themes

XCode Themes
49
star
10

shrub

S3 Proxy for Google App Engine
Python
45
star
11

airake

Rake tasks and generators for Adobe AIR
Ruby
14
star
12

GHGLUtils

OpenGL Utilities for OSX and iOS
Objective-C
14
star
13

GHODictionary

Ordered dictionary
Objective-C
13
star
14

GRUnit

Unit testing for iOS
Objective-C
12
star
15

json-objc-perf

Basic perf tests for Objective-C JSON frameworks
Objective-C
12
star
16

turing-fluid-osx

OSX version of Turing Fluid demo http://cake23.de/turing-fluid.html
Objective-C
10
star
17

KBPGP

PGP for iOS/OSX using kbpgp.js and JavaScriptCore
JavaScript
10
star
18

TSTripleSec

Objective-C implementation of TripleSec
Objective-C
10
star
19

NACrypto

Advanced crypto library. You may want to use NAChloride (libsodium/NaCl) instead.
C
6
star
20

KBKeybaseAPI

Keybase.io API client for iOS/OSX
Objective-C
6
star
21

PointSpriteShader

Example OS X OpenGL project for displaying variable size point sprites with shaders
Objective-C
4
star
22

FFProcessing

C++
3
star
23

GHUITable

Extensions for UITableView and UICollectionView
Objective-C
3
star
24

YOCView

Simplifying UIView and UIViewController interactions.
Objective-C
3
star
25

gabriel.github.com

2
star
26

GHBigNum

Bignum for Obj-C (OpenSSL)
Objective-C
2
star
27

pre-commit-golang

Shell
2
star
28

status-back

For debugging connections
Python
1
star