iOS开发 NSString转JSON、NSDictionary

2019-01-15  本文已影响0人  Jesscia_Liu

1.应用场景

2.需要转义的字符说明及oc方法实现

"  (双引号)
/  (正斜线)
\n (换行符)
\b (退格符)
\f (换页符)
\r (回车符)
\t (制表符,一个tab或按8下空格)

- (NSString *)string2JSONString:(NSString *)string {
    NSMutableString *s = [NSMutableString stringWithString:string];
    [s replaceOccurrencesOfString:@"\"" withString:@"\\\"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    [s replaceOccurrencesOfString:@"/" withString:@"\\/" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    [s replaceOccurrencesOfString:@"\n" withString:@"\\n" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    [s replaceOccurrencesOfString:@"\b" withString:@"\\b" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    [s replaceOccurrencesOfString:@"\f" withString:@"\\f" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    [s replaceOccurrencesOfString:@"\r" withString:@"\\r" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    [s replaceOccurrencesOfString:@"\t" withString:@"\\t" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    return [NSString stringWithString:s];
}

3.读取文本文件内容POST方法上传,参数放在body内

- (void)uploadJsonStringAsyn{
    //读取txt文件内容(包含回车空格等特殊字符)转为jsonString
    NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
    NSString *midiPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"txt"];
    NSFileHandle* readHandle = [NSFileHandle fileHandleForReadingAtPath:midiPath];
    [readHandle seekToFileOffset:0];
    NSData* data = [readHandle readDataToEndOfFile];
    NSString *midiStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    params[@"jsonString"] = [self string2JSONString:midiStr];
    
    //设置上传地址
    NSString *urlString = [NSString stringWithFormat:@"http://"];
    NSURL *url = [NSURL URLWithString:urlString];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"POST"];
    [request addValue:@"application/json;charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
    
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:NSJSONWritingPrettyPrinted error:nil];
    //添加参数
    [request setHTTPBody:jsonData];
    
    //创建session对象
    NSURLSession *session = [NSURLSession sharedSession];
    
    //创建一个请求任务
    NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        NSString *result = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"POST%@",result);
    }];
    
    [task resume];
}

4.iOS字典(NSDictionary)和JSON字符串之间互转

注意: 若midiStr是字典中键对应值,无需调用string2JSONString:

    NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
    NSString *midiPath = [[NSBundle mainBundle] pathForResource:@"test11" ofType:@"txt"];
    NSFileHandle* readHandle = [NSFileHandle fileHandleForReadingAtPath:midiPath];
    [readHandle seekToFileOffset:0];
    NSData* data = [readHandle readDataToEndOfFile];
    NSString *midiStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    params[@"info"] = midiStr;

    NSString *jsonString = [self convert2JSONWithDictionary:params];
    [self convert2DictionaryWithJSONString:jsonString];
4-1 字典转JSON
- (NSString *)convert2JSONWithDictionary:(NSDictionary *)dic{
    NSError *err;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:0 error:&err];
    
    NSString *jsonString;
    if (!jsonData) {
        NSLog(@"%@",err);
    }else{
        jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
    }
    NSLog(@"%@",jsonString);
    return jsonString;
}
4-2 JSON转字典
- (NSDictionary *)convert2DictionaryWithJSONString:(NSString *)jsonString{
    NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
    NSError *err;
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
                                                        options:NSJSONReadingMutableContainers
                                                          error:&err];
    if(err)
    {
        NSLog(@"%@",err);
        return nil;
    }
    return dic;
}

上一篇下一篇

猜你喜欢

热点阅读