边开发边学习

json相关学习

2018-03-20  本文已影响15人  coderhlt

三问公司后台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的相互转换

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);
上一篇 下一篇

猜你喜欢

热点阅读