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);
        }
    }
  • 相关阅读:
    重新学习MySQL数据库开篇:数据库的前世今生
    Java网络编程和NIO详解9:基于NIO的网络编程框架Netty
    测试小鲸鱼
    golang
    技术篇
    请求报文和响应报文
    编程
    测试
    PHP
    centos7.1 从源码升级安装Python3.5.2
  • 原文地址:https://www.cnblogs.com/wang1204/p/5569904.html
Copyright © 2011-2022 走看看