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 相关文章推荐
玩转虚拟域名◎+ .
Oct 09 PHP
用PHP实现Ftp用户的在线管理
Feb 16 PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
Jul 31 PHP
php简单开启gzip压缩方法(zlib.output_compression)
Apr 13 PHP
提高PHP编程效率的方法
Nov 07 PHP
浅析ThinkPHP中execute和query方法的区别
Jun 13 PHP
国产PHP开发框架myqee新手快速入门教程
Jul 14 PHP
PHP中开启gzip压缩的2种方法
Jan 31 PHP
PHP文件操作方法汇总
Jul 01 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
Dec 07 PHP
php提交过来的数据生成为txt文件
Apr 28 PHP
PHP8.0新功能之Match表达式的使用
Jul 19 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
蝙蝠侠:侠影之谜
2020/03/04 欧美动漫
php获取微信共享收货地址的方法
2017/12/21 PHP
基于JQuery的Select选择框的华丽变身
2011/08/23 Javascript
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
浅析JavaScript动画
2015/06/10 Javascript
JavaScript中的parse()方法使用简介
2015/06/12 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
2016/12/16 Javascript
BootStrap注意事项小结(五)表单
2017/03/10 Javascript
vue 中自定义指令改变data中的值
2017/06/02 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
JS事件循环机制event loop宏任务微任务原理解析
2020/08/04 Javascript
[01:02:45]完美世界DOTA2联赛 LBZS vs Forest 第三场 11.07
2020/11/09 DOTA
python删除特定文件的方法
2015/07/30 Python
菜鸟使用python实现正则检测密码合法性
2016/01/05 Python
python difflib模块示例讲解
2017/09/13 Python
python实现音乐下载器
2018/04/15 Python
Python求均值,方差,标准差的实例
2019/06/29 Python
解决Python二维数组赋值问题
2019/11/28 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
HTML5之SVG 2D入门8—文档结构及相关元素总结
2013/01/30 HTML / CSS
Whistles官网:英国女装品牌
2020/08/14 全球购物
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
一年级小学生评语
2014/04/22 职场文书
教师考核材料
2014/05/21 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
小学语文教师年度考核个人总结
2015/02/05 职场文书
八年级语文教学反思
2016/03/03 职场文书
《没有任何借口》读后感:完美的执行能力
2020/01/07 职场文书
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python
python四种出行路线规划的实现
2021/06/23 Python
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android