ios NSDictionary 转换成JSON

上传接口请求参数只接受 json格式的 平时都是dict格式上传的

在网上找了两个dict转json的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
+ (NSString *)convertToJsonData:(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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+ (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;
}

但是坑爹的是 文件转换会报错 Invalid type in JSON write (NSConcreteData)

网上查了下,能够转换为json字符串的对象必须具有如下属性:

顶层对象必须是NSArray或者NSDictionary

所有的对象必须是NSString/NSNumber/NSArray/NSDictionary/NSNull的实例

所有NSDictionary的key必须是NSString类型

ps:用这个方法就可以传dict的参数格式了(没有constructingBodyWithBlock 就只能传json)

1
[manager POST:importUrl parameters:parameter headers:dataDir constructingBodyWithBlock:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {}]