在iOS  5 中,苹果引入了一个解析JSON串的NSJSONSerialization类。
通过该类,我们可以完成JSON数据与NSDictionary和NSArray之间的转化。
 
以前,我记得我用的是第三方的插件。但是,苹果出了这套解析后,效率也大大了超过了,所有的解析第三方类库。所以,推荐使用NSJSONSerialization类来完成转化。
 
一、将NSDictionary或NSArray转化为JSON串
 

// 将字典或者数组转化为JSON串

- (NSData *)toJSONData:(id)theData{

NSError *error = nil;

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:theData

options:NSJSONWritingPrettyPrinted

error:&error];

if ([jsonData length] > 0 && error == nil){

return jsonData;

}else{

return nil;

}

}

 
使用这个方法的返回,我们就可以得到想要的JSON串

NSString *jsonString = [[NSString alloc] initWithData:jsonData

encoding:NSUTF8StringEncoding];

 
 
二、将JSON串转化为NSDictionary或NSArray
 
将NSString转化为NSData

[jsonString dataUsingEncoding:NSASCIIStringEncoding];

 

//
将JSON串转化为字典或者数组

-
(id)toArrayOrNSDictionary:(NSData *)jsonData{

NSError *error = nil;

id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData

options:NSJSONReadingAllowFragments

error:&error];

if (jsonObject != nil && error == nil){

return
jsonObject;

}else{

//

解析错误

return nil;

}

}

 
三、将JSON串与NSArray和NSDictionary的操作进行封装
 
当然,也有很多时候,我们将这些操作,分别定义在NSObject和NSString的一个分类中
 
直接贴:
 
1.将NSString转化为NSArray或者NSDictionary
 

#import
"NSString+JSONCategories.h"

@implementation
NSString(JSONCategories)

-(id)JSONValue;

{

NSData* data =
[self
dataUsingEncoding:NSUTF8StringEncoding];

__autoreleasing NSError* error
= nil;

id
result = [NSJSONSerialization
JSONObjectWithData:data
options:kNilOptions
error:&error];

if (error != nil) return nil;

return result;

}

@end

 
 
2.将NSArray或者NSDictionary转化为NSString
 

#import
"NSObject+JSONCategories.h"

@implementation NSObject
(JSONCategories)

-(NSData*)JSONString;

{

NSError* error = nil;

id
result = [NSJSONSerialization
dataWithJSONObject:self

options:kNilOptions error:&error];

if (error != nil) return nil;

return result;

}

@end

 

希望对你有所帮助!

NSJSONSerialization-JSON数据与NSDictionary和NSArray之间的转化的更多相关文章

  1. json、xml和java对象之间的转化

    其实从面相对象的角度来理解这个问题,就会很清晰.java中的一切皆对象即把世间万物(Everything in the world)看做java对象,任何处理不了的问题都可以先转化成java对象在做处 ...

  2. python字典、字符串(json串)、字节串之间的转化

    字典和json字符串(本质也是字符串)之间的转化用json.dumps和json.loads() json.dumps():   字典→json字符串 json.loads():     json字符 ...

  3. NSDictionary或NSArray与JSON字符串相互转换

    在iOS 5 中,苹果引入了一个解析JSON串的NSJSONSerialization类.通过该类,我们可以完成JSON数据与NSDictionary和NSArray之间的转化. 以前,我记得我用的是 ...

  4. iOS学习—JSON数据解析

      关于在iOS平台上进行JSON解析,已经有很多第三方的开源项目,比如TouchJson,JSONKit,SBJon等,自从iOS5.0以后,苹果SDK推出了自带的JSON解决方案NSJSONSer ...

  5. iOS学习——JSON数据解析(十一)

    在之前的<iOS学习——xml数据解析(九)>介绍了xml数据解析,这一篇简单介绍一下Json数据解析.JSON 即 JavaScript Object Natation,它是一种轻量级的 ...

  6. iOS学习笔记(十一)——JSON数据解析

    在之前的<iOS学习——xml数据解析(九)>介绍了xml数据解析,这一篇简单介绍一下Json数据解析.JSON 即 JavaScript Object Natation,它是一种轻量级的 ...

  7. 将字典或者数组转换成JSON数据或者字符串

    将字典或者数组转换成JSON数据或者字符串 源码: NSDictionary+JSON.h 与 NSDictionary+JSON.m // // NSDictionary+JSON.h // Cat ...

  8. iOS多线程与网络开发之解析json数据

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. // 同步发送信息 2 NSData *data = [NSURLConnection sendSynchronousRequest:request r ...

  9. Swift - 解析JSON数据(内置NSJSONSerialization与第三方JSONKit)

    一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SDK自带的JSON解决方案NSJSONSerialization,这是一个非常好用的JSON生成和解析工具,效率也比其 ...

随机推荐

  1. android design library提供的TabLayout的用法

    在开发中,我们常常需要ViewPager结合Fragment一起使用,如下图: 我们可以使用三方开源的PagerSlidingTabStrip去实现,或者viewpagerindicator,我一般都 ...

  2. LeetCode解题报告:LRU Cache

    LRU Cache Design and implement a data structure for Least Recently Used (LRU) cache. It should suppo ...

  3. 查看Mysql执行计划

    使用navicat查看mysql执行计划: 打开profile分析工具: 查看是否生效:show variable like ‘%profil%’; 查看进程:show processlist; 选择 ...

  4. 常用google产品

      常用google产品 01.谷歌阅读器(Google Reader):网页版RSS阅读器,方便订阅,组织和分享新闻.有手机版. 02.谷歌相册服务(Google Picasa):提供照片的下载和编 ...

  5. CentOS添加swap分区

    在多个VPS上尝试. 1.进入目录 cd /var/ 2.获取要增加的SWAP文件块(这里以1GB为例) dd if=/dev/zero of=swapfile bs=1024 count=10383 ...

  6. 去除 Visual Studio 中臃肿的 ipch 和 sdf 文件

    使用VS2010建立C++解决方案时,会生成SolutionName.sdf和一个叫做ipch的文件夹,这两个文件再加上*.pch等文件使得工程变得非常的庞大,一个简单的程序都会占用几十M的硬盘容量, ...

  7. Self-numbers 2 - SGU 108

    翻译:引自 http://www.cnblogs.com/yylogo/archive/2011/06/09/SGU-108.html 在1949年印度的数学假D.R. Kaprekar发现了一种叫做 ...

  8. 面试题 php随机获取概率结果

    题目:随机输出“苹果”,“橘子”,“香蕉”要求输出“苹果”的概率为50%,“橘子”的概率为30%,“香蕉”的概率为20% 分析 方案一: 最常用rand(1,10)来处理 如果是5以下的输出苹果 6到 ...

  9. llvm學習(二)————llvm編譯與環境構建

    本文由博主原创,转载请注明出处(保留此处和链接): IT人生(http://blog.csdn.net/robinblog/article/details/17339027) 在2011十月份的时候, ...

  10. Amoeba实现mysql主从读写分离

    Amoeba实现mysql主从读写分离 这段在网上看了下关于amoeba的文章,总体感觉好像要比mysql-proxy好的多,也参考了不少的资料,此文章可能与其他文章作者会有雷同的地方,请谅解,但是此 ...