iOS开发知识笔记--NSArray、NSDictionary与JSON相互转换

iOS开发知识笔记--NSArray、NSDictionary与JSON相互转换,第1张

在iOS 5 中,Apple引入了一个解析JSON串的NSJSONSerialization类,效率大大的提高了,推荐通过该类来完成JSON数据与NSArray和NSDictionary之间的转换。

一、将NSArray或者NSDictionary转换为JSON串:

// 将字典或者数组转化为JSON串
+ (NSString *)objectToJson:(id)obj
{
    if (obj == nil) {
        return nil;
    }
    
    NSError *error = nil;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:obj options:NSJSONWritingPrettyPrinted error:&error];

    if ([jsonData length] && error == nil) {
        return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    } else {
        return nil;
    }
}

二、JSON解析为NSArray、NSDictionary:

+ (id)jsonToObject:(NSString *)json
{
    // string转data
    NSData *jsonData = [json dataUsingEncoding:NSUTF8StringEncoding];
    // json解析
    id obj = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];
    return obj;
}

三、实战调用示例代码: 

可以新建一个NSString的分类,直接用NSString调用,虽然第二个不是返回NSString类型,但是都没多大关系,此分类为NSArray、NSDictionary与JSON的相互转换,大家都懂~~~

NSString+JSONCategories.h

#import 

NS_ASSUME_NONNULL_BEGIN

@interface NSString (JSONCategories)

// 将NSArray、NSDictionary转化为JSON串
+ (NSString *)objectToJson:(id)obj;

// JSON串解析为NSArray、NSDictionary
+ (id)jsonToObject:(NSString *)json;

@end

NS_ASSUME_NONNULL_END

NSString+JSONCategories.m

#import "NSString+JSONCategories.h"

@implementation NSString (JSONCategories)

// 将NSArray、NSDictionary转化为JSON串
+ (NSString *)objectToJson:(id)obj
{
    if (obj == nil) {
        return nil;
    }
    
    NSError *error = nil;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:obj options:NSJSONWritingPrettyPrinted error:&error];

    if ([jsonData length] && error == nil) {
        return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    } else {
        return nil;
    }
}

// JSON串解析为NSArray、NSDictionary
+ (id)jsonToObject:(NSString *)json
{
    // string转data
    NSData *jsonData = [json dataUsingEncoding:NSUTF8StringEncoding];
    // JSON解析
    id obj = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];
    return obj;
}

@end

使用:

#import "DemoViewController.h"
#import "NSString+JSONCategories.h"

@interface DemoViewController ()

@end

@implementation DemoViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = UIColor.whiteColor;
    
    NSArray *testArray = @[@"乔丹",@"詹姆斯",@"科比"];
    NSDictionary *testDictionary = @{@"姓名":@"乔丹",
                                     @"年龄":@"99",
                                     @"联盟":@"NBA"};
    
    // 将NSArray转化为JSON串
    NSString *arrayToJsonString = [NSString objectToJson:testArray];
    NSLog(@"arrayToJsonString = %@",arrayToJsonString);
    
    // JSON串解析为NSArray、NSDictionary
    NSString *jsonToArrayString = [NSString jsonToObject:arrayToJsonString];
    NSLog(@"jsonToArrayString = %@",jsonToArrayString);
    
    
    // 将NSDictionary转化为JSON串
    NSString *dictionaryToJsonString = [NSString objectToJson:testDictionary];
    NSLog(@"dictionaryToJsonString = %@",dictionaryToJsonString);
    
    // JSON串解析为NSArray、NSDictionary
    NSString *jsonToDictionaryString = [NSString jsonToObject:dictionaryToJsonString];
    NSLog(@"jsonToDictionaryString = %@",jsonToDictionaryString);
}

@end

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/996444.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存