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与SQL注入攻击[一]
Apr 17 PHP
一个基于PDO的数据库操作类
Mar 24 PHP
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
Jun 04 PHP
使用PHP实现二分查找算法代码分享
Jun 24 PHP
php从数组中随机抽取一些元素的代码
Nov 05 PHP
Php中用PDO查询Mysql来避免SQL注入风险的方法
Apr 25 PHP
php数组删除元素示例
Mar 21 PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 PHP
深入理解PHP中的Streams工具
Jul 03 PHP
PHP正则表达式之捕获组与非捕获组
Nov 06 PHP
PHP微信支付实例解析
Jul 22 PHP
php常用日期时间函数实例小结
Jul 04 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
Laravel 5框架学习之模型、控制器、视图基础流程
2015/04/08 PHP
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
PHP分享图片的生成方法
2018/04/25 PHP
javascript radio 联动效果
2009/03/04 Javascript
javascript中的继承实例代码
2011/04/27 Javascript
JS实现淘宝幻灯片效果的实现方法
2013/03/22 Javascript
iframe父页面获取子页面参数的方法
2014/02/21 Javascript
关于JavaScript对象的动态选择及遍历对象
2014/03/10 Javascript
JavaScript中的值类型转换介绍
2014/12/31 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
AngularJS学习笔记(三)数据双向绑定的简单实例
2016/11/08 Javascript
JavaScript基础之AJAX简单的小demo
2017/01/29 Javascript
webstorm中配置nodejs环境及npm的实例
2018/05/15 NodeJs
JavaScript文本特效实例小结【3个示例】
2018/12/22 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
[56:42]VP vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python读写文件方法总结
2015/06/09 Python
Python中的条件判断语句基础学习教程
2016/02/07 Python
详解Python import方法引入模块的实例
2017/08/02 Python
python 读写中文json的实例详解
2017/10/29 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
python占位符输入方式实例
2019/05/27 Python
详解Python3 pickle模块用法
2019/09/16 Python
如何安装并在pycharm使用selenium的方法
2020/04/30 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
计算机科学与技术应届生求职信
2013/11/07 职场文书
会计学个人自荐信模板
2013/12/13 职场文书
办理护照介绍信
2014/01/16 职场文书
学习党的群众路线教育实践活动心得体会
2014/03/01 职场文书
教师批评与自我批评
2014/10/15 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
上诉答辩状范文
2015/05/22 职场文书
离婚案件原告代理词
2015/05/23 职场文书
2015年乡镇食品安全工作总结
2015/10/22 职场文书