iOS里的JSON转换

这篇博客探讨了在iOS开发中如何利用NSJSONSerialization进行JSON数据的转换,包括从String,NSData到Array和Dictionary之间的互转,并且提到了第三方库如JSONKit和SwiftJSON,指出使用系统原生库的效率优势。还分享了Objective-C和Swift的转换函数代码片段,并提供了相关工程的链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在处理网络请求时,我们需要在String,NSData,Array,Dictionary之间转换,比如把一个字典转换为一个字符串作为某个字段的值,以及最为常见的把请求到到NSData类型的数据转换为字典或数组。
有一些第三方库已经帮我们完成了这些工作,比如Objective写的JSONKit和Swift写的SwiftJSON等。
实际上我们可以用系统原生的NSJSONSerialization类和字符串的便捷初始化方法实现这些转化。而且这样转化比第三方的效率高。

我们可以封装几个可爱的函数(下边函数的JSON主要指的是字典、数组等):
1.Objective-C:


+ (NSData *)dataWithJSON:(id)object {
    return object ? [NSJSONSerializationdataWithJSONObject:object options:0error:nil] :nil;
}
+ (id)JSONWithData:(NSData *)data {
    return data ? [NSJSONSerializationJSONObjectWithData:data options:0error:nil] :nil;
}
+ (id)mutableJSONWithData:(NSData *)data {
    return data ? [NSJSONSerializationJSONObjectWithData:data options:NSJSONReadingMutableContainerserror:nil] :nil;
}

+ (NSString *)stringWithData:(NSData *)data {
    return data ? [[NSStringalloc] initWithData:dataencoding:NSUTF8StringEncoding] :nil;
}
+ (NSData *)dataWithString:(NSString *)string {
    return string ? [stringdataUsingEncoding:NSUTF8StringEncoding] :nil;
}

+ (id)JSONWithString:(NSString *)string {
    NSData *data = [selfdataWithString:string];
    return [selfJSONWithData:data];
}
+ (NSString *)stringWithJSON:(id)object {
    NSData *data = [selfdataWithJSON:object];
    return [selfstringWithData:data];
}

2.Swift

func dataWithJSON(object:AnyObject?) ->NSData? {
    iflet object = object {
        do {
            let data =try NSJSONSerialization.dataWithJSONObject(object, options:NSJSONWritingOptions())
            return data
        } catch {
            dLog("parse JSONObject -> NSData failed")
        }
    }
    returnnil
}
func JSONWithData(data:NSData?) ->AnyObject? {
    iflet data = data {
        do {
            let object =try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments)
            return object
        } catch {
            dLog("parse NSData -> JSONObject failed")
        }        
    }
    returnnil
}

func stringWithData(data:NSData?) ->String? {
    iflet data = data {
        returnString(data: data, encoding: NSUTF8StringEncoding)
    }
    returnnil
}
func dataWithString(string:String?) ->NSData? {
    iflet string = string {
        return string.dataUsingEncoding(NSUTF8StringEncoding)
    }
    returnnil
}

func JSONWithString(string:String?) ->AnyObject? {
    let data =dataWithString(string)
    returnJSONWithData(data)
}
func stringWithJSON(object:AnyObject?) ->String? {
    let data =dataWithJSON(object)
    returnstringWithData(data)
}

这些工具方法我已经写到了iOS新工程准备工作集里了,可以在下边网址看到:
Objective-C
Swift

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值