NSDictionary转换成JSON字符串

原创 2016年03月07日 16:03:11

普通情况下,你可能会用一个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也应该这样做。

iOS 将NSArray、NSDictionary转换为JSON格式进行网络传输

将NSArray、NSDictionary转换为JSON格式进行网络传输,是经常用到的,但是iOS没有提供方便的方法库。我们模拟一个实例,假设我们需要把一个自定义的一个模型(只有若干属性的Class)...
  • worldzhy
  • worldzhy
  • 2015年11月22日 23:12
  • 13472

【iOS开发】字典(NSDictionary)和JSON字符串(NSString)之间互转

1. 字典转Json字符串+ (NSString*)convertToJSONData:(id)infoDict { NSError *error; NSData *jsonData ...
  • Hanrovey
  • Hanrovey
  • 2016年06月03日 14:08
  • 21230

iOS 系统自带JSON转字典 字典转JSON

/*! * @brief 把格式化的JSON格式的字符串转换成字典 * @param jsonString JSON格式的字符串 * @return 返回字典 */ json格式字符串转...

NSJSONSerialization-JSON数据与NSDictionary和NSArray之间的转化

http://blog.sina.com.cn/s/blog_7b9d64af0101ce92.html 点击打开链接 在iOS  5 中,苹果引入了一个解析JSON串的NSJSONSeri...
  • xyxjn
  • xyxjn
  • 2013年12月09日 16:09
  • 24920

笔记:NSDictionary 转 NSString

由于开发的方便,有时候需要将NSDictionary通过NSLog打印出来,比如生产环境的推送时,我们不能直接的打断点调试,所以摘录一个方法,以便打印方便: 2. -(NSString*)Data...
  • yi_zz32
  • yi_zz32
  • 2016年08月29日 17:12
  • 5333

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

ios json 与JSON ,NSDictionary相互转换

在iOS  5 中,苹果引入了一个解析JSON串的NSJSONSerialization类。 通过该类,我们可以完成JSON数据与NSDictionary和NSArray之间的转化。 以前,我记得...
  • PZ0605
  • PZ0605
  • 2015年04月04日 10:28
  • 772

ios NSDictionary/JSON转换

//JSON to NSDictionary - (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString {   if (j...

Objective-C Json 使用

通过使用NSJSONSerialization 可以Json与Foundation的相互转换。使用 JSONObjectWithData 可以将 Json 转化为 Foundation。使用 data...

将Dictionary序列化为json数据 、json数据反序列化为Dictionary

将Dictionary序列化为json数据 、json数据反序列化为Dictionary List集合序列化
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NSDictionary转换成JSON字符串
举报原因:
原因补充:

(最多只允许输入30个字)