iOS 系统自带JSON解析,NSJSONReadingOptions参数解读

开发中,我们经常需要解析JSON数据,系统提供的

[NSJSONSerialization JSONObjectWithData:[objc dataUsingEncoding:NSUTF8StringEncoding]

options:(NSJSONReadingAllowFragments) error:&error]
解析方法,需要填写一个NSJSONReadingOptions参数

首先用代码来说明NSJSONReadingMutableContainers的作用:

  1. NSString *str = @"{\"name\":\"Alice\"}";
  2. NSMutableDictionary *dict = [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
  3. // 程序崩溃,不选用NSJSONReadingOptions,则返回的对象是不可变的,NSDictionary
  4. [dict setObject:@"male" forKey:@"sex"];
  5. NSMutableDictionary *dict = [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:nil];
  6. // 没问题,使用NSJSONReadingMutableContainers,则返回的对象是可变的,NSMutableDictionary
  7. [dict setObject:@"male" forKey:@"sex"];
  8. NSLog(@"%@", dict);

NSJSONReadingMutableContainers:返回可变容器类,NSMutableDictionary或NSMutableArray。 
NSJSONReadingMutableLeaves:返回的JSON对象中字符串的值为NSMutableString,目前在iOS 7上测试不好用,应该是个bug,参见: 
http://stackoverflow.com/questions/19345864/nsjsonreadingmutableleaves-option-is-not-working 
 
NSJSONReadingAllowFragments:允许JSON字符串最外层既不是NSArray也不是NSDictionary,但必须是有效的JSON Fragment。例如使用这个选项可以解析 @“111” 这样的字符串。参见: 
http://stackoverflow.com/questions/16961025/nsjsonserialization-nsjsonreadingallowfragments-reading

时间: 2024-10-29 05:33:01

iOS 系统自带JSON解析,NSJSONReadingOptions参数解读的相关文章

iOS系统自带的 UIAlertView 自动旋转的实现

这里主要解析 UIAlertView 的几个关键功能的实现: 随着设备屏幕的旋转而旋转: Alert弹出框,使用UIWindow来实现,就是说,不用依赖于当前显示在最前面的UIView. 实现源码参考: http://git.oschina.net/shede333/BMAlertHud 使用UIWindow 弹出一个Alert框,最好新建一个 UIWIndow, 把window.windowLevel = UIWindowLevelAlert,这样就能显示在最前面: 调用[window mak

iOS系统自带的 **UIAlertView** 以及 屏幕自动旋转的实现

iOS系统自带的 UIAlertView 自动旋转的实现 这里主要解析 UIAlertView 的几个关键功能的实现: 随着设备屏幕的旋转而旋转: Alert弹出框,使用UIWindow来实现,就是说,不用依赖于当前显示在最前面的UIView. 实现源码参考: http://git.oschina.net/shede333/BMAlertHud 使用UIWindow 弹出一个Alert框,最好新建一个 UIWIndow, 把window.windowLevel = UIWindowLevelAl

iOS XML 系统自带的解析方法

XML 文档解析 使用的五个代理方法1.文档解析开始 parserDidStartDocument:2.文档解析结束 parserDidEndDocument:3.文档 解析元素 开始 didStartElement:4.文档 解析元素 结束 didEndElement:5.解析 文档元素 的内容 parser foundCharacters: #import <UIKit/UIKit.h> @interface ViewController : UIViewController<NSX

iOS网络编程开发—JSON解析与XML解析

一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典和数组 {"name" : "jack", "age" : 10} {"names" : ["jack", "rose", "jim"]} 标准JSON格式的注意点:key必须用双引号 要想从

登录验证用第三方不能实现时用系统自带的解析方式

转载自http://www.cnblogs.com/ios8/archive/2013/11/11/ios-login-json.html 用户输入用户名和密码,点击登录...我们把用户名和密码(用post方式或者get方式,get方式多用于测试看你需要)传给服务器,服务器进行判断,然后返回一个接口给我们(这里服务器返回的json接口,正确就返回一个正确的接口给我们,错误就返回一个错误的接口给我们).我们拿到接口去解析,判断是否登录成功做相应的操作. 关于json解析,可以网上找找资料先看看,我

IOS系统自带社交分享

很多APP中都带有社交分享功能,通过用户的分享,让更多地人去了解和使用这个APP,目前社交分享是移动互联网应用程序推广的最重要手段之一,国内较或的分享平台有微信,IOS6后苹果集成的新浪微博,还有IOS7后集成的腾讯微博. 在IOS中,实现社交分享可以自己编写各个平台的分享代码,但代码量较多,也可以利用IOS自带的Social.framework,更可以利用第三方的分享框架,如友盟,ShareSDK等.接下来先介绍一个系统自带的分享功能. 打开设备或模拟器的偏好设置,可以看到如下 系统需要先登录

ios 系统自带的菊花简单使用教程

//等待登陆菊花初始化:UIActivityIndicatorView *ActivityIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; //设置菊花的中心点,貌似不能设置菊花的大小,系统自带的有三种样式 ActivityIndicator.center = CGPointMake(100, 100); //添加菊花 [se

社交网络编程API之iOS系统自带分享

社交网络编程API 社交网络编程主要使用iOS提供的Social框架,目前Social框架主要包含两个类: SLComposeViewController 提供撰写社交信息(如微博信息)的视图控制器,有iOS系统提供UI,就是写入要分享内容的小弹出框. SLRequest封装了HTTP请求,提供了同一的请求社交网络服务的接口,能够直接与社交网路服务通信的能力,没有UI需要自己编写设计. 除了Social框架外,还有可能用到UIActivityViewControlelr和ACAccount.UI

ios 解决数据请求json解析字典后,由于java某些类库转换json字符串后出现键值为&lt;null&gt;无法保存在userDefault的问题

解决数据请求json解析字典后,由于java某些类库转换json字符串后出现键值为<null>无法保存在userDefault. 打印下得到的字典数据: “username”=<null> 此时如果将字典保存到userDefault中会报错 所以需要遍历字典将其替换 for (NSString*s in [Dict1 allKeys]) { if ([Dict1[s] isEqual:[NSNull null]]) { [Dict1 setObject:@""