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 相关文章推荐
MySQL GBK→UTF-8编码转换
May 24 PHP
不用mod_rewrite直接用php实现伪静态化页面代码
Oct 04 PHP
神盾加密解密教程(一)PHP变量可用字符
May 28 PHP
php魔术函数__call()用法实例分析
Feb 13 PHP
php两种无限分类方法实例
Apr 21 PHP
iis6手工创建网站后无法运行php脚本的解决方法
Jun 08 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
Jul 03 PHP
php双层循环(九九乘法表)
Oct 23 PHP
php利用ob_start()清除输出和选择性输出的方法
Jan 18 PHP
php学习笔记之mb_strstr的基本使用
Feb 03 PHP
ThinkPHP防止重复提交表单的方法实例分析
May 10 PHP
php实现在线考试系统【附源码】
Sep 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 fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
php过滤XSS攻击的函数
2013/11/12 PHP
PHP中Session引起的脚本阻塞问题解决办法
2014/04/08 PHP
php实现读取内存顺序号
2015/03/29 PHP
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
PHP递归删除多维数组中的某个值
2017/04/17 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
2018/04/04 PHP
优化网页之快速的呈现我们的网页
2007/06/29 Javascript
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
jQuery 关于伪类选择符的使用说明
2013/04/24 Javascript
jquery中使用循环下拉菜单示例代码
2014/09/24 Javascript
innerHTML在IE中报错解决方案
2014/12/15 Javascript
JQuery导航菜单选择特效
2016/04/11 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
2016/05/24 Javascript
JavaScript图片处理与合成总结
2018/03/04 Javascript
webpack4之SplitChunksPlugin使用指南
2018/06/12 Javascript
小程序获取周围IBeacon设备的方法
2018/10/31 Javascript
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
javascript中call,apply,bind的区别详解
2020/12/11 Javascript
详解python上传文件和字符到PHP服务器
2017/11/24 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
2019/02/12 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
Python中的Cookie模块如何使用
2020/06/04 Python
伦敦最著名的老字号百货公司:Selfridges(塞尔福里奇百货)
2016/07/25 全球购物
西班牙英格列斯百货官网:El Corte Inglés
2016/09/25 全球购物
数百万免费的图形资源:Freepik
2020/09/21 全球购物
售后专员岗位职责
2013/12/08 职场文书
六十岁生日答谢词
2014/01/10 职场文书
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
法人委托书范本
2014/04/04 职场文书
国庆节活动总结
2014/08/26 职场文书
升学宴来宾致辞
2015/07/27 职场文书
Python使用UDP实现720p视频传输的操作
2021/04/24 Python