JSON

服务器一般返回的都是JSON、XML格式的数据?(文件下载除外)
因为这两种格式的数据是大家通用的,安卓、iOS等都能用。
JSON:轻量级。标准的JSON格式key必须使用“”双引号。

    JSON格式:
    {
    "name":"xiaoming",
    "age":12,
    "qq":[
              {  "dahao":"123123"  },
              {    "xiaohao":"456456" }
          ]
    }

  格式转换:
    JSON                  OC
    大括号{}             NSDictionary
    中括号[]             NSArray
    双引号""             NSString  
    数字1,2             NSNumber

数据解析方案:

苹果自带:NSJSONSerialization(性能最好)
第三方框架:JSONKit、SBJson、TouchJSON(性能左到右依次减低)


服务器数据->NSData(JSON数据)->OC对象(字典、数组等)->模型->使用数据
将数据写成plist文件:
字典的方法writeToFile:atomic:


视频播放:

导入框架MediaPlayer.h
创建视频播放器的两个类:
MPMoviePlayerController:继承自NSObject,不能直接显示,需要将它的view添加到另外控制器view上才能显示
MPMoviePlayerViewController:直接显示,播放。
[NSNull null]是单例对象。


总结:

JSON数据(NSData) -> OC对象(Foundation Object)
    - {} -> NSDictionary @{}
    - [] -> NSArray @[]
    - "abc" -> NSString @"abc"
    - 10 -> NSNumber @10
    - 10.5 -> NSNumber @10.5
    - true -> NSNumber @1
    - false -> NSNumber @0
    - null -> NSNull

JSON数据(NSData) -> OC对象(Foundation Object)
// 利用NSJSONSerialization类
+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
    - NSJSONReadingOptions
- NSJSONReadingMutableContainers = (1UL << 0)
    - 创建出来的数组和字典就是可变
- NSJSONReadingMutableLeaves = (1UL << 1)
    - 数组或者字典里面的字符串是可变的
- NSJSONReadingAllowFragments
    - 允许解析出来的对象不是字典或者数组,比如直接是字符串或者NSNumber

OC对象(Foundation Object)-> JSON数据(NSData)
// 利用NSJSONSerialization类
+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;

格式化服务器返回的JSON数据
  • 在线格式化:http://tool.oschina.net/codeformat/json
  • 将服务器返回的字典或者数组写成plist文件writeToFile:atomic:

利用苹果官方API播放视频
// 创建视频播放器
MPMoviePlayerViewController *vc = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:urlStr]];
// 显示视频
[self presentViewController:vc animated:YES completion:nil];
字典转模型框架
    1、 Mantle
         所有模型都必须继承自MTModel
    2、 JSONModel
         所有模型都必须继承自JSONModel
    3、 MJExtension
         不需要强制继承任何其他类

设计框架需要考虑的问题

    1、 侵入性
         侵入性大就意味着很难离开这个框架
    2 、 易用性
         比如少量代码实现N多功能
    3、 扩展性
         很容易给这个框架增加新框架

你可能感兴趣的:(JSON)