美文网首页iOS自我学习库iOS高质量博客iOS 进阶
iOS-Json字符串转字典,字典转Json字符串、以及Json

iOS-Json字符串转字典,字典转Json字符串、以及Json

作者: Simple_Code | 来源:发表于2018-03-29 13:47 被阅读1893次
    生活甚好.jpeg

    首先给大家带来网上常见的Json字符串转字典,字典转Json字符串代码

    Json字符串转字典

    + (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString
    {
        if (jsonString == nil) {
            return nil;
        }
    
        NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
        NSError *err;
        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
                                                            options:NSJSONReadingMutableContainers
                                                              error:&err];
        if(err)
        {
            NSLog(@"json解析失败:%@",err);
            return nil;
        }
        return dic;
    }
    

    字典转Json字符串

    + (NSString *)jsonStringWithDict:(NSDictionary *)dict {
        NSError *error;
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
        NSString *jsonString;
        if (!jsonData) {
            NSLog(@"%@",error);
        }else{
            jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
        }
        return jsonString;
    }
    

    有时候我们需要的把字典转成Json字符串(去掉空格、换行符等)、我们一般的做法

    + (NSString *)jsonStringWithDict:(NSDictionary *)dict {
        NSError *error;
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
        
        NSString *jsonString;
        if (!jsonData) {
            NSLog(@"%@",error);
        }else{
            jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
        }
        
        NSMutableString *mutStr = [NSMutableString stringWithString:jsonString];
        NSRange range = {0,jsonString.length};
        //去掉字符串中的空格
        [mutStr replaceOccurrencesOfString:@" " withString:@"" options:NSLiteralSearch range:range];
        NSRange range2 = {0,mutStr.length};
        //去掉字符串中的换行符
        [mutStr replaceOccurrencesOfString:@"\n" withString:@"" options:NSLiteralSearch range:range2];
        return mutStr;
    }
    

    这种做法看似解决了、Json字符串里面的空格、换行符,实际上把键值对里面的key,value的空格也去掉

    其实iOS11已经存在对应的枚举类型,把字典转换成单行Json字符串的data

    下面我们就介绍次枚举

    NSJSONWritingOptions

    typedef NS_OPTIONS(NSUInteger, NSJSONWritingOptions) {
        NSJSONWritingPrettyPrinted = (1UL << 0),
    
        /* Sorts dictionary keys for output using [NSLocale systemLocale]. Keys are compared using NSNumericSearch. The specific sorting method used is subject to change.
         */
        NSJSONWritingSortedKeys API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0)) = (1UL << 1)
    } API_AVAILABLE(macos(10.7), ios(5.0), watchos(2.0), tvos(9.0));
    

    对上面字段的解释:
    NSJSONWritingPrettyPrinted = (1UL << 0) //是将生成的json数据格式化输出,这样可读性高
    NSJSONWritingSortedKeys //输出的json字符串就是一整行

    注意 不设置则输出的json字符串就是一整行。

    最后我们改上面字典转Json字符串的代码为下面代码:

    + (NSString *)jsonStringWithDict:(NSDictionary *)dict {
        NSError *error;
        
        // 注
        //NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingSortedKeys error:&error];
        
        // NSJSONWritingSortedKeys这个枚举类型只适用iOS11所以我是使用下面写法解决的
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:nil error:&error];
    
        NSString *jsonString;
        if (!jsonData) {
            NSLog(@"%@",error);
        }else{
            jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
        }
    
        return jsonString;
    }
    

    这样我们得到的Json字符串就是一行没有空格和换行符的字符串

    如果有更好的方法、不吝赐教!

    相关文章

      网友评论

      本文标题:iOS-Json字符串转字典,字典转Json字符串、以及Json

      本文链接:https://www.haomeiwen.com/subject/gnsmcftx.html