IOS 开发之NSDictionary转换成JSON字符串

 更新时间:2017年08月14日 09:33:28   作者:NunchakusHuang  
这篇文章主要介绍了IOS 开发之NSDictionary转换成JSON字符串的相关资料,这里提供实例帮助大家学习理解这部分知识,需要的朋友可以参考下

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 生成加密公钥加密私钥实例详解

    这篇文章主要介绍了php 生成加密公钥加密私钥实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • php微信公众号开发模式详解

    php微信公众号开发模式详解

    这篇文章主要介绍了php微信公众号开发者模式,通过后台服务器与微信关注用户实现更多的交互作用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • CI框架验证码CAPTCHA辅助函数用法实例

    CI框架验证码CAPTCHA辅助函数用法实例

    这篇文章主要介绍了CI框架验证码CAPTCHA辅助函数用法,以实例形式详细讲述了基于CAPTCHA辅助函数实现验证码的方法,需要的朋友可以参考下
    2014-11-11
  • 分享自定义的几个PHP功能函数

    分享自定义的几个PHP功能函数

    这篇文章主要介绍了分享自定义的几个PHP功能函数,本文罗列的都是WEB开发中常用的一些功能函数,例如提交过滤、字符串截取、IP地址匿名化、隐藏文件真实路径等,需要的朋友可以参考下
    2015-04-04
  • 利用switch语句进行多选一判断的实例代码

    利用switch语句进行多选一判断的实例代码

    下面小编就为大家带来一篇利用switch语句进行多选一判断的实例代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • 详解PHP5.6.30与Apache2.4.x配置

    详解PHP5.6.30与Apache2.4.x配置

    这篇文章主要介绍了详解PHP5.6.30与Apache2.4.x配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • smarty模板引擎使用内建函数foreach循环取出所有数组值的方法

    smarty模板引擎使用内建函数foreach循环取出所有数组值的方法

    这篇文章主要介绍了smarty模板引擎使用内建函数foreach循环取出所有数组值的方法,实例分析了foreach循环遍历数组的几种常用技巧,需要的朋友可以参考下
    2015-01-01
  • php如何用PDO操作大数据对象

    php如何用PDO操作大数据对象

    我们在使用数据库时,很少会向数据库中存储很大的内容字段。但是,MySQL 其实也为我们准备了这种类型的存储,只是我们平常用得不多而已。今天我们就来学习了解一下使用 PDO 如何操作 MySQL 中的大数据对象。
    2021-06-06
  • Drupal7连接多个数据库及常见问题解决

    Drupal7连接多个数据库及常见问题解决

    这篇文章主要介绍了Drupal7连接多个数据库的方法、操作实例,以及常见问题解决方法,需要的朋友可以参考下
    2014-03-03
  • CI(CodeIgniter)简单统计访问人数实现方法

    CI(CodeIgniter)简单统计访问人数实现方法

    这篇文章主要介绍了CI(CodeIgniter)简单统计访问人数实现方法,这里使用TXT文本文件简单演示了CodeIgniter框架记录访问人数的实现技巧,需要的朋友可以参考下
    2016-01-01

最新评论