加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

NSJSONSerialization(category)的一个扩展类

发布时间:2020-12-16 19:15:34 所属栏目:百科 来源:网络整理
导读:.h文件 //// NSJSONSerialization+Manage.h// SVPullToRefreshDemo//// Created by Fuer on 14-7-4.// Copyright (c) 2014年 Home. All rights reserved.//#import Foundation/Foundation.h/** * The domain for NSErrors generated by the NSJSONSerializat

.h文件

//
//  NSJSONSerialization+Manage.h
//  SVPullToRefreshDemo
//
//  Created by Fuer on 14-7-4.
//  Copyright (c) 2014年 Home. All rights reserved.
//

#import <Foundation/Foundation.h>
/**
 * The domain for NSErrors generated by the NSJSONSerialization+UAAdditions methods.
 */
extern NSString * const UAJSONSerializationErrorDomain;

NS_ENUM(NSInteger,UAJSONSerializationErrorCode) {
    UAJSONSerializationErrorCodeInvalidObject
};


@interface NSJSONSerialization (Manage)
/**
 * Converts a Foundation object to a JSON formatted NSString
 * @param jsonObject Foundation object to convert
 * @return NSString formatted as JSON,or nil if an error occurs
 * @note Writing JSON strings with this method defaults to no NSJSONWritingOptions,and does not accept fragments.
 */
+ (NSString *)stringWithObject:(id)jsonObject;

/**
 * Converts a Foundation object to a JSON formatted NSString
 * @param jsonObject Foundation object to convert
 * @param error An NSError pointer for storing errors,if applicable.
 * @return NSString formatted as JSON,and does not accept fragments.
 */
+ (NSString *)stringWithObject:(id)jsonObject error:(NSError **)error;

/**
 * Converts a Foundation object to a JSON formatted NSString
 * @param jsonObject Foundation object to convert
 * @param acceptingFragments `YES` if objects representing JSON value fragments are acceptable,`NO` otherwise.
 * @return NSString formatted as JSON,or nil if an error occurs.
 * @note Writing JSON strings with this method defaults to no NSJSONWritingOptions.
 */
+ (NSString *)stringWithObject:(id)jsonObject acceptingFragments:(BOOL)acceptingFragments;

/**
 * Converts a Foundation object to a JSON formatted NSString
 * @param jsonObject Foundation object to convert
 * @param acceptingFragments `YES` if objects representing JSON value fragments are acceptable,`NO` otherwise.
 * @param error An NSError pointer for storing errors,or nil if an error occurs.
 * @note Writing JSON strings with this method defaults to no NSJSONWritingOptions.
 */
+ (NSString *)stringWithObject:(id)jsonObject acceptingFragments:(BOOL)acceptingFragments error:(NSError **)error;

/**
 * Converts a Foundation object to a JSON formatted NSString
 * @param jsonObject Foundation object to convert
 * @param opt NSJSONWritingOptions options
 * @return NSString formatted as JSON,or nil if an error occurs
 */
+ (NSString *)stringWithObject:(id)jsonObject options:(NSJSONWritingOptions)opt;

/**
 * Converts a Foundation object to a JSON formatted NSString
 * @param jsonObject Foundation object to convert
 * @param opt NSJSONWritingOptions options
 * @param error An NSError pointer for storing errors,or nil if an error occurs
 */
+ (NSString *)stringWithObject:(id)jsonObject options:(NSJSONWritingOptions)opt error:(NSError **)error;


/**
 * Create a Foundation object from JSON string
 * @param jsonString the JSON NSString to convert
 * @return A Foundation object,or nil if an error occurs.
 * @note Creating objects with this method defaults to NSJSONReadingMutableContainers options.
 */
+ (id)objectWithString:(NSString *)jsonString;

/**
 * Create a Foundation object from JSON string
 * @param jsonString the JSON NSString to convert
 * @param opt NSJSONReadingOptions
 * @return A Foundation object,or nil if an error occurs.
 */
+ (id)objectWithString:(NSString *)jsonString options:(NSJSONReadingOptions)opt;

/**
 * Create a Foundation object from JSON string
 * @param jsonString the JSON NSString to convert
 * @param opt NSJSONReadingOptions
 * @param error An NSError pointer for storing errors,if applicable.
 * @return A Foundation object,or nil if an error occurs.
 */
+ (id)objectWithString:(NSString *)jsonString options:(NSJSONReadingOptions)opt error:(NSError **)error;


@end

.m文件
//
//  NSJSONSerialization+Manage.m
//  SVPullToRefreshDemo
//
//  Created by Fuer on 14-7-4.
//  Copyright (c) 2014年 Home. All rights reserved.
//
#import "NSJSONSerialization+Manage.h"


@implementation NSJSONSerialization (Manage)

NSString * const UAJSONSerializationErrorDomain = @"com.urbanairship.json_serialization";

+ (NSString *)stringWithObject:(id)jsonObject {
    return [NSJSONSerialization stringWithObject:jsonObject options:0 acceptingFragments:NO error:nil];
}

+ (NSString *)stringWithObject:(id)jsonObject error:(NSError **)error {
    return [NSJSONSerialization stringWithObject:jsonObject options:0 acceptingFragments:NO error:error];
}

+ (NSString *)stringWithObject:(id)jsonObject options:(NSJSONWritingOptions)opt {
    return [NSJSONSerialization stringWithObject:jsonObject options:opt acceptingFragments:NO error:nil];
}

+ (NSString *)stringWithObject:(id)jsonObject options:(NSJSONWritingOptions)opt error:(NSError **)error {
    return [NSJSONSerialization stringWithObject:jsonObject options:opt acceptingFragments:NO error:error];
}

+ (NSString *)stringWithObject:(id)jsonObject acceptingFragments:(BOOL)acceptingFragments {
    return [NSJSONSerialization stringWithObject:jsonObject options:0 acceptingFragments:acceptingFragments error:nil];
}

+ (NSString *)stringWithObject:(id)jsonObject acceptingFragments:(BOOL)acceptingFragments error:(NSError **)error {
    return [NSJSONSerialization stringWithObject:jsonObject options:0 acceptingFragments:acceptingFragments error:error];
}

+ (NSString *)stringWithObject:(id)jsonObject
                       options:(NSJSONWritingOptions)opt
            acceptingFragments:(BOOL)acceptingFragments
                         error:(NSError **)error {
    if (!jsonObject) {
        return nil;
        
    }
    
    if (!acceptingFragments ||
        ([jsonObject isKindOfClass:[NSArray class]] || [jsonObject isKindOfClass:[NSDictionary class]])) {
        if (![NSJSONSerialization isValidJSONObject:jsonObject]) {
            if (error) {
                NSString *msg = [NSString stringWithFormat:@"Attempted to serialize invalid object: %@",jsonObject];
                NSDictionary *info = @{NSLocalizedDescriptionKey:msg};
                *error =  [NSError errorWithDomain:UAJSONSerializationErrorDomain
                                              code:UAJSONSerializationErrorCodeInvalidObject
                                          userInfo:info];
            }
            return nil;
        }
        NSData *data = [NSJSONSerialization dataWithJSONObject:jsonObject
                                                       options:opt
                                                         error:error];
        
        return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    } else {
        //this is a dirty hack but it works well. while NSJSONSerialization doesn't allow writing of
        //fragments,if we serialize the value in an array without pretty printing,and remove the
        //surrounding bracket characters,we get the equivalent result.
        NSString *arrayString = [self stringWithObject:@[jsonObject] options:0 acceptingFragments:NO error:error];
        return [arrayString substringWithRange:NSMakeRange(1,arrayString.length-2)];
    }
}

+ (id)objectWithString:(NSString *)jsonString {
    return [self objectWithString:jsonString options:NSJSONReadingMutableContainers];
}

+ (id)objectWithString:(NSString *)jsonString options:(NSJSONReadingOptions)opt {
    return [self objectWithString:jsonString options:opt error:nil];
}

+ (id)objectWithString:(NSString *)jsonString options:(NSJSONReadingOptions)opt error:(NSError **)error {
    if (!jsonString) {
        return nil;
    }
    return [NSJSONSerialization JSONObjectWithData: [jsonString dataUsingEncoding:NSUTF8StringEncoding]
                                           options: opt
                                             error: error];
}
@end


option参数说明. enum { NSJSONReadingMutableContainers = (1UL << 0),//返回的容器是可变类型的(Array和Dictionary) NSJSONReadingMutableLeaves = (1UL << 1),//返回的叶子NSString是可变类型的; NSJSONReadingAllowFragments = (1UL << 2) //允许顶层的界面不是NSArray或NSDictionary; }; typedef NSUInteger NSJSONReadingOptions;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读