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 相关文章推荐
yii框架源码分析之创建controller代码
Jun 28 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
Mar 04 PHP
我整理的PHP 7.0主要新特性
Jan 07 PHP
PHP获取昨天、今天及明天日期的方法
Feb 03 PHP
PHP-FPM运行状态的实时查看及监控详解
Nov 18 PHP
PHP实现的XML操作类【XML Library】
Dec 29 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
Feb 07 PHP
PHP实现留言板功能的详细代码
Mar 25 PHP
PHP清除缓存的几种方法总结
Sep 12 PHP
PHP实现正则匹配所有括号中的内容
Jun 22 PHP
ThinkPHP中图片按比例切割的代码实例
Mar 08 PHP
tp5修改(实现即点即改)
Oct 18 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数组操作
2011/12/30 PHP
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
js querySelector和getElementById通过id获取元素的区别
2012/04/20 Javascript
jQuery Ajax请求状态管理器打包
2012/05/03 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
js中判断对象是否为空的三种实现方法
2013/12/23 Javascript
js sort 二维数组排序的用法小结
2014/01/24 Javascript
from表单多个按钮提交用onclick跳转不同action
2014/04/24 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
2014/06/26 Javascript
Bootstrap3 Grid system原理及应用详解
2016/09/30 Javascript
JS实现移动端整屏滑动的实例代码
2017/11/10 Javascript
Vue 动态添加路由及生成菜单的方法示例
2019/06/20 Javascript
jquery 插件重新绑定的处理方法分析
2019/11/23 jQuery
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
python计算文本文件行数的方法
2015/07/06 Python
python利用装饰器进行运算的实例分析
2015/08/04 Python
python实现给scatter设置颜色渐变条colorbar的方法
2018/12/13 Python
Django实现网页分页功能
2019/10/31 Python
使用anaconda安装pytorch的实现步骤
2020/09/03 Python
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
夜大自我鉴定
2013/10/31 职场文书
医护人员英文求职信范文
2013/11/26 职场文书
聚美优品的广告词
2014/03/14 职场文书
求职信标题怎么写
2014/05/26 职场文书
党员批评与自我批评思想汇报(集锦)
2014/09/14 职场文书
2014年幼儿园国庆主题活动方案
2014/09/16 职场文书
党的群众路线教育实践活动个人整改落实情况汇报
2014/10/28 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书
《走遍天下书为侣》教学反思
2016/02/22 职场文书
python 爬取豆瓣网页的示例
2021/04/13 Python
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
2022/08/05 Vue.js