iOS-Json字符串转字典,字典转Json字符串、以及Json字符串去掉空格、换行符等

生活甚好.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字符串就是一行没有空格和换行符的字符串

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 最先接触编程的知识是在大学里面,大学里面学了一些基础的知识,c语言,java语言,单片机的汇编语言等;大学毕...
    oceanfive阅读 8,426评论 0 7
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 9,699评论 0 13
  • Z是一个骨子里很有傲气的姑娘 穿着打扮喜欢的东西都比同龄人超前 当然这个她喜欢的男人也不例外 是一个大三的学...
    L_habiba阅读 1,703评论 0 0
  • 开放得 如此红艳 似燃烧的火焰 加注了 激情的热恋 每一次重逢 都如同初见 相约 美好瞬间 把你的秀发 绕在 我的...
    小白杨老师阅读 2,976评论 1 6
  • 生命迄今唯一收到过的一封情书是一封绝情书 信里你说 “我知道你喜欢我 可我并不喜欢你 但是我很善良 所以请你不要喜...
    容器君阅读 2,271评论 0 0