在之前的开发中一般上传给后台服务器的各个字段的内容都是一些字符串,而最近在一个项目中却需要上传一个JSON字符串,由于之前没上传过JSON字符串所以感觉挺新鲜,于是上网查了相关知识,并在这里记录一下。
在上传JSON字符串之前首先需要获取JSON字符串,JSON字符串其实也是由OC中的某个对象转换过来的。转换思路:将某个对象先通过NSJSONSerialization转换成NSData对象,然后将这个NSData对象转换成字符串,这样得到的字符串就是JSON字符串。(是不是很简单!)
看代码:
-(NSString*)ObjectToJsonString:(id)object{
NSString *jsonString = [[NSString alloc]init];
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:object options:NSJSONWritingPrettyPrinted error:&error];
if (! jsonData) {
NSLog(@"error: %@", error);
} else {
jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
return jsonString;
}
举例:将一个数组转成JSON字符串
数组:
(
{
id = liangsen0;
index = 0;
name = OC0;
},
{
id = liangsen1;
index = 1;
name = OC1;
},
{
id = liangsen2;
index = 2;
name = OC2;
}
)
将上面的数组利用上面的方法转成的JSON字符串:
[
{
"index" : 0,
"name" : "OC0",
"id" : "liangsen0"
},
{
"index" : 1,
"name" : "OC1",
"id" : "liangsen1"
},
{
"index" : 2,
"name" : "OC2",
"id" : "liangsen2"
}
]
然后这样的JSON字符串大多数并不能满足我们的需要(和后台给出的JSON字符串形式不同),上面的这个JSON字符串中会有空格、换行符、反斜杠,这些特殊字符串都是我们不需要的,因此我们还需要对JSON字符串中进行处理(去掉那些我们不需要的字符)。
新的对象转JSON的方法:
-(NSString*)ObjectTojsonString:(id)object
{
NSString *jsonString = [[NSString
alloc]init];
NSError *error;
NSData *jsonData = [NSJSONSerialization
dataWithJSONObject:object
options:NSJSONWritingPrettyPrinted
error:&error];
if (! jsonData) {
NSLog(@"error: %@", 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];
NSRange range3 = {0, mutStr.length};
NSString * str = @"\\";
[mutStr replaceOccurrencesOfString:str withString:@"" options:NSLiteralSearch range:range3];
return mutStr;
}
该方法中主要就是添加了去除一些字符的方法。注意:我们在去除字符串中的“\”反斜杠时,需要使用"\"。
最终打印的字符串:
[{"index":0,"name":"OC0","id":"liangsen0"},{"index":1,"name":"OC1","id":"liangsen1"},{"index":2,"name":"OC2","id":"liangsen2"}]