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 获取目录下的图片并随机显示的代码
Dec 28 PHP
php skymvc 一款轻量、简单的php
Jun 28 PHP
PHP中将ip地址转成十进制数的两种实用方法
Aug 15 PHP
PHP使用ob_start生成html页面的方法
Nov 07 PHP
PHP传参之传值与传址的区别
Apr 24 PHP
php计算整个mysql数据库大小的方法
Jun 19 PHP
php统计数组元素个数的方法
Jul 02 PHP
php基于curl主动推送最新内容给百度收录的方法
Oct 14 PHP
Nginx环境下PHP flush失效的解决方法
Oct 19 PHP
php 截取GBK文档某个位置开始的n个字符方法
Mar 08 PHP
thinkPHP5框架路由常用知识点汇总
Sep 15 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
Oct 30 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常用hash加密函数
2014/11/22 PHP
php中return的用法实例分析
2015/02/28 PHP
浅谈php处理后端&接口访问超时的解决方法
2016/10/29 PHP
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
什么是PHP文件?如何打开PHP文件?
2017/06/27 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
Array.prototype 的泛型应用分析
2010/04/30 Javascript
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
基于jquery的图片幻灯展示源码
2012/07/15 Javascript
异步安全加载javascript文件的方法
2015/07/21 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
2015/10/22 Javascript
js获取时间精确到秒(年月日)
2016/03/16 Javascript
AngularJS 中的Promise --- $q服务详解
2016/09/14 Javascript
jquery判断页面网址是否有效的两种方法
2016/12/11 Javascript
Angular中使用ng-zorro图标库部分图标不能正常显示问题
2019/04/22 Javascript
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
Python简单获取二维数组行列数的方法示例
2018/12/21 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
2019/02/18 Python
在PyCharm中实现添加快捷模块
2020/02/12 Python
Python第三方包之DingDingBot钉钉机器人
2020/04/09 Python
django 模型字段设置默认值代码
2020/07/15 Python
荷兰在线钓鱼商店:Raven
2019/06/26 全球购物
英国顶级足球鞋的领先零售商:Lovell Soccer
2019/08/27 全球购物
中文专业毕业生自荐信
2013/10/28 职场文书
怎样写演讲稿
2014/01/04 职场文书
舞蹈教师自荐信
2014/01/27 职场文书
门诊手术室工作制度
2014/01/30 职场文书
《问银河》教学反思
2014/02/19 职场文书
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
竞选学习委员演讲稿
2014/04/28 职场文书
班级标语大全
2014/06/21 职场文书
应聘教师求职信
2014/07/19 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
检查机关领导群众路线教育实践活动个人整改措施
2014/10/28 职场文书
暑期辅导班宣传单
2015/07/14 职场文书
2016关于预防职务犯罪的心得体会
2016/01/21 职场文书