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小技巧搜集,每个PHPer都来露一手
Jan 02 PHP
php xml文件操作实现代码(二)
Mar 20 PHP
一步一步学习PHP(4) php 函数 补充2
Feb 15 PHP
php读取csv实现csv文件下载功能
Dec 18 PHP
zf框架的zend_cache缓存使用方法(zend框架)
Mar 14 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
Aug 08 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
Oct 01 PHP
php实现的微信红包算法分析(非官方)
Sep 25 PHP
php如何执行非缓冲查询API
Jul 22 PHP
PHP编程 SSO详细介绍及简单实例
Jan 13 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
Feb 23 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
May 29 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
非常不错的MySQL优化的8条经验
2008/03/24 PHP
php中opendir函数用法实例
2014/11/15 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
js给onclick事件赋值,动态传参数实例解说
2013/03/28 Javascript
基于jQuery.Validate验证库知识点的详解
2013/04/26 Javascript
js防止表单重复提交的两种方法
2013/09/30 Javascript
node.js中的fs.createWriteStream方法使用说明
2014/12/17 Javascript
JavaScript中的console.profile()函数详细介绍
2014/12/29 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
使用JavaScript进行表单校验功能
2017/08/01 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
小程序中设置缓存过期的实现方法
2020/01/14 Javascript
javascript 内存模型实例详解
2020/04/18 Javascript
Python中Selenium模拟JQuery滑动解锁实例
2017/07/26 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
2017/09/30 Python
numpy.linspace函数具体使用详解
2019/05/27 Python
Python sep参数使用方法详解
2020/02/12 Python
python实现快递价格查询系统
2020/03/03 Python
Pyqt助手安装PyQt5帮助文档过程图解
2020/11/20 Python
网站设计师的岗位职责
2013/11/21 职场文书
大学生职业生涯规划书范文
2014/01/14 职场文书
教育学习自我评价
2014/02/03 职场文书
高一学生期末评语
2014/04/25 职场文书
代领毕业证委托书
2014/08/02 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
违纪检讨书范文
2015/01/27 职场文书
警示教育观后感
2015/06/17 职场文书
大学生读书笔记大全
2015/07/01 职场文书
老人院义工活动感想
2015/08/07 职场文书
演讲稿:态度决定一切
2019/04/02 职场文书
OpenCV绘制圆端矩形的示例代码
2021/08/30 Python
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
2021/08/30 Python