IOS 开发之NSDictionary转换成JSON字符串


Posted in PHP onAugust 14, 2017

IOS 开发之NSDictionary转换成JSON字符串

普通情况下,你可能会用一个NSDictionary的分类去做NSDictionary转JSON,如下代码:

NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:self options:NSJSONWritingPrettyPrinted error:&error];
if (! jsonData) {
  return @"{}";
} else {
  return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}

然而,NSDictionary装的数据类型鱼龙混杂,有可能是NSDate,NSNumber,NSValue等Objective-C对象,而[NSJSONSerialization dataWithJSONObject:options:error:]这个方法是不能解析这些对象的,如果有这些对象,则会导致crash。所以我们应该在调用NSJSONSerialization之前加一步,将所有数据处理成NSString,代码如下:

NSError *error = nil;
NSData *jsonData = nil;
if (!self) {
  return nil;
}
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[self enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
  NSString *keyString = nil;
  NSString *valueString = nil;
  if ([key isKindOfClass:[NSString class]]) {
    keyString = key;
  }else{
    keyString = [NSString stringWithFormat:@"%@",key];
  }

  if ([obj isKindOfClass:[NSString class]]) {
    valueString = obj;
  }else{
    valueString = [NSString stringWithFormat:@"%@",obj];
  }

  [dict setObject:valueString forKey:keyString];
}];
jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
if ([jsonData length] == 0 || error != nil) {
  return nil;
}
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
return jsonString;

这样就NSDictionary转JSON就不会crash了,同理,NSArray也应该这样做。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
PHP连接access数据库
Mar 27 PHP
php入门学习知识点七 PHP函数的基本应用
Jul 14 PHP
PHP读取文件并可支持远程文件的代码分享
Oct 03 PHP
深入解析php之apc
May 15 PHP
php cli模式学习(PHP命令行模式)
Jun 03 PHP
深入解析fsockopen与pfsockopen的区别
Jul 05 PHP
php中cookie实现二级域名可访问操作的方法
Nov 11 PHP
学习php设计模式 php实现适配器模式
Dec 07 PHP
Zend Framework教程之Application用法实例详解
Mar 14 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
PHP递归实现快速排序的方法示例
Dec 18 PHP
PHP实现爬虫爬取图片代码实例
Mar 03 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
Aug 14 #PHP
利用laravel搭建一个迷你博客实战教程
Aug 13 #PHP
利用laravel+ajax实现文件上传功能方法示例
Aug 13 #PHP
Laravel5.5新特性之友好报错以及展示详解
Aug 13 #PHP
php数据序列化测试实例详解
Aug 12 #PHP
PHP新特性之字节码缓存和内置服务器
Aug 11 #PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
Aug 11 #PHP
You might like
建立动态的WML站点(一)
2006/10/09 PHP
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
PHP获取文件相对路径的方法
2015/02/26 PHP
PHP中的命名空间详细介绍
2015/07/02 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
Symfony生成二维码的方法
2016/02/04 PHP
Yii2框架dropDownList下拉菜单用法实例分析
2016/07/18 PHP
微信开发之php表单微信中自动提交两次问题解决办法
2017/01/08 PHP
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
2010/05/13 Javascript
jQuery EasyUI中对表格进行编辑的实现代码
2010/06/10 Javascript
使用js实现数据格式化
2014/12/03 Javascript
JS 动态判断PC和手机浏览器实现代码
2016/09/21 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
JS实现图片预览的两种方式
2017/06/27 Javascript
React Native实现地址挑选器功能
2017/10/24 Javascript
React props和state属性的具体使用方法
2018/04/12 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
Python上传package到Pypi(代码简单)
2016/02/06 Python
python中装饰器级连的使用方法示例
2017/09/29 Python
基于pip install django失败时的解决方法
2018/06/12 Python
Python异常处理操作实例详解
2018/08/28 Python
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
Python3.8中使用f-strings调试
2019/05/22 Python
解决Django中多条件查询的问题
2019/07/18 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
python3实现绘制二维点图
2019/12/04 Python
opencv3/C++ 平面对象识别&透视变换方式
2019/12/11 Python
css3实现圆锥渐变conic-gradient效果
2020/02/12 HTML / CSS
大众服装店创业计划书范文
2014/01/01 职场文书
2014年应届大学生毕业自我鉴定
2014/01/31 职场文书
气象学专业个人求职信
2014/03/15 职场文书
关于学习的演讲稿
2014/05/10 职场文书
2015年师德表现自我评价
2015/03/05 职场文书
2015年团支书工作总结
2015/04/03 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书