普通情况下,你可能会用一个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装的数据类型鱼龙混杂,有可能是NSDateNSNumberNSValue等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也应该这样做。

NSDictionary转换成JSON字符串相关推荐

  1. 读取CSV文件内容,将其转换成JSON字符串输出

    CsvToJsonUtil 工具类作用:读取CSV文件内容,将其转换成JSON字符串输出 转换工具类代码如下: package com.test.util;import java.io.*; impo ...

  2. 把对象转换成JSON字符串 第二稿支持移动设备

    /*** 导入jackson包 把对象转换成JSON字符串 第二稿 支持移动设备* @param pn* @param request* @return*/@RequestMapping(value ...

  3. Java对象转换成JSON对象/JSON对象转换成JSON字符串/JSON字符串转换成JS对象

    文章目录 后端部分 前端部分 后端部分 Option op = new Option("海淀","hd");//java对象转换json对象 JSONObjec ...

  4. JSONSerializer把类转换成JSON字符串

    JSONSerializer把类转换成JSON字符串 阅读优秀的代码真的是种享受,从ProMesh的项目中发现了现在的一段优美的代码,记下来,也让喜欢它的人有机会阅读到. //============ ...

  5. 将map转换成json字符串

    import java.util.HashMap;import java.util.Map;import net.sf.json.JSONObject;public class Transfer {p ...

  6. 分享一个小工具:Excel表高速转换成JSON字符串

    在游戏项目中一般都须要由策划制作大量的游戏内容,当中非常大一部分是使用Excel表来制作的.于是程序就须要把Excel文件转换成程序方便读取的格式. 之前项目使用的Excel表导入工具都是通过Offi ...

  7. FastJson PropertyNamingStrategy 转换成JSON字符串的四种格式配置及源码解析

    FastJson在将bean转成JSON字符串时, 默认使用CamelCase(驼峰命名)的配置; 在1.2.15版本之后,FastJson支持配置PropertyNamingStrategy,有四种 ...

  8. java bean 转json 串,终于找到了一篇能看懂的如何把javabean转换成json字符串的文章,嘿嘿,分享一下!...

    学会了在j2ee中使用ajax后,有时候从服务器返回客户端的数据是对象,自己手动拼凑 json字符串容易出错,通过谷歌知道了json-lib这个类库,方便的支持java中对象到json字符串的转化. ...

  9. String转JSONObject,JSONObject转JSONArray,JSONArray数组转换成JSON字符串

    如果用的是jar包 则导包为 net.sf.json.JSONObject 如果用的是fastjson  则导包为 import com.alibaba.fastjson.JSONObject 以下为 ...

最新文章

  1. 单向链表的有关操作(链式存储结构)
  2. idea创建包怎么让包分层_干货 | 通勤包怎么选?我推荐这6只
  3. 微信小程序tabBar导航栏页和其他页执行onLoad与onShow时机;tabBar页获取不到参数问题;navigateTo跳转无效问题;onShow执行两次问题;
  4. 算法入门篇 一 时间复杂度
  5. python批量修改文件名为excel中指定名称_在Python脚本的帮助下,使用excelsh中的名称映射重命名文件夹中的文件名...
  6. MFC返回的临时对象指针成因?
  7. 如何在logcat中获取多个tag标签的过滤信息
  8. 【Elasticsearch】 es 索引 内置 字段 _source
  9. Python培训班怎么选?
  10. Android9.0添加HIDL
  11. LNMP平台部署及应用
  12. cad道路里程桩号标注_cad桩号标注插件
  13. android9.0官方下载,安卓9.0系统刷机包下载
  14. opencv-python对大视频切割成小视频
  15. linux命令man ls,linux 命令ls man手册的详解
  16. php 判断华为手机,一招教你如何看穿华为手机的内存类型
  17. 子网掩码和IP地址的关系
  18. 使用VMware 16 安装中标麒麟 7
  19. 在PC体验sailfishos(旗鱼)系统
  20. [buuctf]crypto刷题学习记录(1-22)

热门文章

  1. 简单汇总整理IC芯片检测的几种主要方法
  2. 算法警告!该图片涉嫌违规不予显示
  3. 泪目!这篇博士论文致谢走红:感谢博一与我结婚的妻子
  4. 【PostgreSQL】客户端请求处理 PostgresMain()
  5. [Unity3D]添加音效说明
  6. android 扫描二维码黑屏,android--zxing返回扫描界面出现黑屏的解决方案
  7. 软件测试Day2知识点思维导图
  8. c语言实现词法分析器+文法分析器(全代码)
  9. 初级入门——认识Python语言
  10. STM32F103C8T6模拟IIC控制4针0.96寸OLED显示屏