zoukankan      html  css  js  c++  java
  • OC之JSON数据解析

    JSON介绍:

    作为一种轻量级的数据交换格式,正在逐步取代XML,成为网络数据的通用格式
    基于JavaScript的一个子集
    易读性略差,编码手写难度大,数据量小
    JSON格式取代了XML给网络传输带来了很大的便利,但是却没有了XML的一目了然,尤其是JSON数据很长的时候,我们会陷入繁琐复杂的数据节点查找中


    1.解析格式说明:

    当数据结构为 {key:value,key:value,...}的键值对的结构时,可以解析成NSDictionary

    当数据结构为 ["java","javascript","vb",...]结构时,可以解析成NSArray

    2.序列化与反序列化的说明:

    序列化:在传输之前,将对象转换成有序的字符串或者二进制数据流
    反序列化:将接收到的字符串或者二进制数据流转换成对象或者数组,以便程序访问

    3.其他常见的三种JSON解析第三方库:
     SBJson 使用最广泛
     JSONKit
     TouchJson

    从iOS 5开始,使用NSJSONSerialization对JSON解析,特点是使用简单,解析性能也不错

    - (void)loadJSON
    {
        // 1. 从服务器获取数据 GET
        // 1) url
        NSURL *url = [NSURL URLWithString:@"http://write.blog.csdn.net/postedit"];
        // 2) request
        NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:2.0f];
        
        // 3) 连接同步,可以让用户先有内容可看
        NSError *error;
        // NSData存放的是二进制的数据
        NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
        
        // 判断返回结果
        if (data != nil) {
            // 正常返回数据
    //        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    //        NSLog(@"%@", result);
            
            // 反序列化
            NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
            
            NSLog(@"%@", array);
            // 技巧,从网络上接收到JSON,为了方便阅读,可以将其反序列化之后,保存至文件
            [array writeToFile:@"/Users/apple/Desktop/123.plist" atomically:YES];
            
            // 将数据转换成模型,并保存至表格需要的数组中
            NSMutableArray *arrayM = [NSMutableArray arrayWithCapacity:array.count];
            
            for (NSDictionary *dict in array) {
                Video *video = [[Video alloc] init];
                
                [video setValuesForKeysWithDictionary:dict];
                
                [arrayM addObject:video];
            }
            
            _dataList = arrayM;
        } else if (error == nil) {
            NSLog(@"返回空数据");
        } else {
            NSLog(@"%@", error.localizedDescription);
        }
    }
  • 相关阅读:
    【算法研究】目标检测
    【Java学习笔记】Java中方法和成员变量的访问控制
    DevExpress XtraReports 入门一 创建 Hello World 报表
    整理点dropdownList的应用
    Developer Express 之 XtraReport报表预览控件PrintControl设置
    C#实现winform仿div+css半透明遮罩效果
    动态传递参数到DevExpress.XtraReports的小结 .
    Developer Express 之 XtraReport如何显示设计窗体,打开已设计过的报表
    Developer Express 之 XtraReport如何动态绑定数据
    c#判断右键菜单(ContextMenuStrip)是从哪个控件弹出来的方法
  • 原文地址:https://www.cnblogs.com/wang1204/p/5569904.html
Copyright © 2011-2022 走看看