HMJSONKit

由于第三方的JSONKit 有内容泄漏,故自己重新写JSON解析,用系统自带的NSJSONSerialization写(适用IOS5以上)更加高效和方便 ,形式参考JSONKit,这样就不用去改动工程的代码。直接上代码

//
//  HMJSONKit.h
//  CaiYun
//
//  Created by lgqyhm on 14-1-3.
//
//

#import <Foundation/Foundation.h>

@interface HMJSONKit : NSObject


@end


#pragma mark Deserializing methods

#define KJsonkit
#ifdef KJsonkit

@interface NSString (HMJSONKitDeserializing)
- (id)objectFromJSONString;
//- (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags;
//- (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;
//- (id)mutableObjectFromJSONString;
//- (id)mutableObjectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags;
//- (id)mutableObjectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;
@end

@interface NSData (HMJSONKitDeserializing)
// The NSData MUST be UTF8 encoded JSON.
- (id)objectFromJSONData;
//- (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags;
//- (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;
//- (id)mutableObjectFromJSONData;
//- (id)mutableObjectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags;
//- (id)mutableObjectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;
@end


#pragma mark Serializing methods


@interface NSString (HMJSONKitSerializing)
// Convenience methods for those that need to serialize the receiving NSString (i.e., instead of having to serialize a NSArray with a single NSString, you can "serialize to JSON" just the NSString).
// Normally, a string that is serialized to JSON has quotation marks surrounding it, which you may or may not want when serializing a single string, and can be controlled with includeQuotes:
// includeQuotes:YES `a "test"...` -> `"a \"test\"..."`
// includeQuotes:NO  `a "test"...` -> `a \"test\"...`
- (NSData *)JSONData;     // Invokes JSONDataWithOptions:JKSerializeOptionNone   includeQuotes:YES
//- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions includeQuotes:(BOOL)includeQuotes error:(NSError **)error;
- (NSString *)JSONString; // Invokes JSONStringWithOptions:JKSerializeOptionNone includeQuotes:YES
//- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions includeQuotes:(BOOL)includeQuotes error:(NSError **)error;
@end

@interface NSArray (HMJSONKitSerializing)
- (NSData *)JSONData;
//- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error;
//- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error;
- (NSString *)JSONString;
//- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error;
//- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error;
@end

@interface NSDictionary (HMJSONKitSerializing)
- (NSData *)JSONData;
//- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error;
//- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error;
- (NSString *)JSONString;
//- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error;
//- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error;
@end

#endif

//
//  HMJSONKit.m
//  CaiYun
//
//  Created by lgqyhm on 14-1-3.
//
//

#import "HMJSONKit.h"

#ifdef KJsonkit

NSString *const DeserializeFailed = @"Deserialize Failed";
NSString *const SerializedFailed = @"Serialized Failed";

BOOL HMJSONKitValidation(id object)
{
    if (![NSJSONSerialization isValidJSONObject:object])
    {
        [NSException raise:DeserializeFailed format:@"check the string"];
        return NO;
    }

    return YES;
}

id HMJSONKitDeSerializeObjectWithData(NSData *data)
{
//    if (!HMJSONKitValidation(data))
//        return nil;
//
    NSError *error;
    id JSONObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
    if (!JSONObject)
    {
        [NSException raise:DeserializeFailed format:@"Error: %@", error];
    }

    return JSONObject;
}

NSData *HMJSONKitSerializeObject(id object)
{
    if (!HMJSONKitValidation(object))
        return nil;

    NSError *error;
    NSData *data = [NSJSONSerialization dataWithJSONObject:object options:0 error:&error];
    if (!data)
    {
        [NSException raise:DeserializeFailed format:@"Error: %@", error];
    }

    return data;
}

#pragma mark - Deserialization

@implementation NSString (HMJSONKitDeserializing)

- (id)objectFromJSONString
{
    NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding];
    return HMJSONKitDeSerializeObjectWithData(data);
}

@end

@implementation NSData (HMJSONKitDeserializing)

- (id)objectFromJSONData
{
    return HMJSONKitDeSerializeObjectWithData(self);
}

@end

#pragma mark - Serialization

@implementation NSString (HMJSONKitSerializing)

- (NSData *)JSONData
{
    return HMJSONKitSerializeObject(self);
}

// 没用到,很奇怪,为啥是 string 了还要进行转换
- (NSString *)JSONString
{
    NSData *data = HMJSONKitSerializeObject(self);
    NSString *JSONString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    return [JSONString autorelease];
}

@end

@implementation NSArray (HMJSONKitSerializing)

- (NSData *)JSONData
{
    return HMJSONKitSerializeObject(self);
}

- (NSString *)JSONString
{
    NSData *data = HMJSONKitSerializeObject(self);
    NSString *JSONString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    return [JSONString autorelease];
}

@end

@implementation NSDictionary (HMJSONKitSerializing)

- (NSData *)JSONData
{
    return HMJSONKitSerializeObject(self);
}

- (NSString *)JSONString
{
    NSData *data = HMJSONKitSerializeObject(self);
    NSString *JSONString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    return [JSONString autorelease];
}

@end

#endif


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值