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在字符串中查找另一个字符串
Nov 19 PHP
PHP CURL获取cookies模拟登录的方法
Nov 04 PHP
PHP文件锁定写入实例解析
Jul 14 PHP
浅析get与post的一些特殊情况
Jul 28 PHP
php判断当前用户已在别处登录的方法
Jan 06 PHP
smarty模板引擎从php中获取数据的方法
Jan 22 PHP
php解析xml方法实例详解
May 12 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
Oct 08 PHP
php中static 静态变量和普通变量的区别
Dec 01 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
May 05 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
Jul 26 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
PHP邮件专题
2006/10/09 PHP
利用static实现表格的颜色隔行显示的代码
2007/09/02 PHP
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
PHP数组排序函数合集 以及它们之间的联系分析
2013/06/27 PHP
php建立Ftp连接的方法
2015/03/07 PHP
理解PHP中的Session及对Session有效期的控制
2016/01/08 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
php实现图片压缩处理
2020/09/09 PHP
iframe 自适应高度[在IE6 IE7 FF下测试通过]
2009/04/13 Javascript
JavaScript this调用规则说明
2010/03/08 Javascript
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
jquery JSON的解析方式示例介绍
2014/07/27 Javascript
jquery获取url参数及url加参数的方法
2015/10/26 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
get  post jsonp三种数据交互形式实例详解
2017/08/25 Javascript
解决layui中onchange失效以及form动态渲染失效的问题
2019/09/27 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
windows下安装python paramiko模块的代码
2013/02/10 Python
在Python中使用全局日志时需要注意的问题
2015/05/06 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
python画柱状图--不同颜色并显示数值的方法
2018/12/13 Python
pandas按条件筛选数据的实现
2021/02/20 Python
CSS3制作Dropdown下拉菜单的方法
2015/07/18 HTML / CSS
5分钟让你掌握css3阴影、倒影、渐变小技巧(小编推荐)
2016/08/15 HTML / CSS
Mountain Hardwear官网:攀岩服装和户外装备
2019/09/26 全球购物
Footshop乌克兰:运动鞋的最大选择
2019/12/01 全球购物
数控技术专业推荐信
2013/11/01 职场文书
趣味运动会活动方案
2014/02/12 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
幼师辞职信范文
2015/02/27 职场文书
医药公司开票员岗位职责
2015/04/15 职场文书
大学推普周活动总结
2015/05/07 职场文书
投诉信格式范文
2015/07/02 职场文书
2015教师节通讯稿
2015/07/20 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
资深HR教你写好简历中的自我评价
2019/05/07 职场文书