json相关学习
三问公司后台afn返回了其中一个字典返回了一个json字符串的键值,在问我们群里问我们这几个人,突然感觉傻傻的分不清json、字典、json字符串了,以前从来没想过今天就简单的回顾学习一下,为了以后更清醒少点坑吧。
一、JSON数据格式简介
JSON(JavaScript Object Notation)是一种基于文本的数据交换格式。
{
"age": 12.2,
"married":false,
"chinese":true,
"name":"jack",
"weight":null,
"height":""
}
{
"age": 12.2,
"married":false,
"chinese":true,
"name":"jack",
"weight":null,
"height":"",
"content":[{
"image":"123",
"sounds":"souece"
},
{
"url":"ww.bbaidu"
}]
}
一个花括号表示一个json对象,冒号左边表示json对象的属性,冒号右边表示属性的值。基本语法格式{ 名称:值对 },其中名称必须加双引号;值对是字符串加双引号,BOOL类型的值是false或true,基本数据类型不加引号。数组用中括号扩起来。
二、JSON与OC的相互转换
-
JSON数据 -> OC对象
1 、 + (id)JSONObjectWithData:(NSData)data options:(NSJSONReadingOptions)opt error:(NSError*)error; -
OC对象 -> JSON数据
2、 + (NSData)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError*)error;
NSJSONWritingOptions告诉系统如何转换json数据(转换出来的对象是否可变/子对象是否课变/是否是标准json)
NSJSONReadingMutableContainers = 转换出来的对象是可变数组或者可变字典
NSJSONReadingMutableLeaves = 转换出来的OC对象中的字符串是可变的 \ 注意: iOS7之后无效 bug
NSJSONReadingAllowFragments = 如果服务器返回的JSON数据, 不是标准的JSON, 那么就必须使用这个值, 否则无法解析,允许解析出来的对象不是字典或者数组,比如直接是字符串或者NSNumber,比如直接是字符串或者NSNumber :{15}, {"abc"}
json数据
{
"age": 12.2,
"married":false,
"chinese":true,
"name":"jack",
"weight":null,
"height":""
}
一、json转换成OC对象
//json对象转OC对象
NSDictionary *responsObject= [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
[responsObject enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
NSLog(@"%@",[obj class]);//打印观察得到的真实类型
}];
---------------------------------------------------------------------
经过转换
json 对象: -> 字典(OC对象)
{ {
"age": 1, age = 1;// NSNumber
"married":false, chinese = 1;//BOOL
"chinese":true, 得到: married = 0;//BOOL
"name":"jack", name=jack;//
"weight":null, weight = "<null>";//NSNull
"height":"" height="";//NSString
} }
---------------------------------------------------------------------
二、OC对象 转Json
NSDictionary *dic=@{@"name":@"jack",
@"age":@"24",
};
//1、OC对象转成json数据
NSData*data= [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:nil];
//2、json数据转成json字符串
NSString *jsonstring=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
//3、写入1.json文件中
[jsonstring writeToFile:@"/Users/reitaketachibana/Desktop/aassssss/1.json" atomically:YES];
三、Json字符串转OC对象
NSString *jsonstring=@"{\"大表哥\":\"冷武橘\",\"三问\":\"薛某\"}";
//1.json字符串转jsondata
NSData *jsondata = [jsonstring dataUsingEncoding:NSUTF8StringEncoding];
//2.json转OC对象
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsondata options:NSJSONReadingMutableContainers error:nil];
NSLog(@"%@",dic);