`
wandejun1012
  • 浏览: 2737493 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

IOS解析Json

    博客分类:
  • IOS
 
阅读更多

背景:继续破解打卡,用IOS开发出一个APP.单个helloWorldOK了,和后端互动成功,现在就要将解析出的Json的结果放在页面上。同时期望按钮点击后,能改变页面上某些Label的值。

 

环境:Mac OS 10.11.5+Xcode7.3.1

 

1、IOS自从5以后就自带了解析了Json的功能,有一个类叫NSJSONSerialization,参考教程

如果自己懒得写后台Json的话,可以用一些公共的Json来练习

 

2、按钮点击的事件,可以通过IBAction来绑定。具体操作就是在Story面板上,选择某个按钮,右键后会出现一堆事件列表,选择一个,点加号,然后拖到ViewController.m中,这样就会建立一个链接了。

参考链接

 

3、关于事件点击后,如何控制Label的值。这个要用Outlet来解决。思路和2非常像,不过在拖动之前,需要先在ViewController.h和ViewController.m中分别新建Property和thesize.下面的动作就和2差不多了。在某个按钮上右击,找到.h中的Outlet,拖动即可。

参考教程

 

4、控制页面跳转教程(仍未测试)

 

5、手工构造Json教程

 

6、关于Json中是数组是的解析方法

 

7、IOS动态拼接字符串

 

8、IOS NsLog用法 

 

总结:IOS基础非常不扎实,导致好多地方走了非常多的弯路,仍然没走过去。

主要体现在:Json出来的数据判断报错或者无效。给Story上的控件赋值报错

 

下面附上我Controller的源码,写的较挫,回头还要再优化。

//
//  ViewController.m
//  dakaDemo
//
//  Created by gemmy on 16/7/24.
//  Copyright © 2016年 shundepg. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController


@synthesize labelDate;
@synthesize initBtn;
@synthesize amBtn;
@synthesize pmBtn;
@synthesize labelAmId;
@synthesize labelPmId;


- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


- (IBAction)initClick:(id)sender {
    
    
    NSError *error;
    
    //1.确定请求路径
    //NSURL *url = [NSURL URLWithString:@"http://apistore.baidu.com/microservice/weather?cityid=101010100"];
    NSURL *url = [NSURL URLWithString:@"http://115.182.83.55:8003/mobile"];
    
    //2.创建可变的请求对象
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    
    //3.修改请求方法为POST(大写)
    request.HTTPMethod = @"POST";
    
    //3.1 人为构造服务器需要的json格式
    NSDictionary * dic= @{@"methodName":@"getMyAttendance",@"orderNo":@"1463358870034",@"version":@"1.1.0",@"needReLogin":@"false",@"osType":@"IOS",@"deviceToken":@"",@"IOSUuid":@"201605160834302541341878187",@"mac":@"201605160834302541341878187",@"token":@"1b38dfa19a056fdb101543c5a6f6cdde",@"ip":@"",@"email":@"gogogo@xxx.com",@"userName":@"张大吉",@"companyLogoUrl":@"http://www.xxxtd.com/pc/images/icon_logo.png",@"phone":@"18812345678"};
    
    NSLog(@"DIC = %@",dic);
    NSData * data = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&error];
    
    // 把一个json格式的data,解析为OC中的NSString类型对象
    // 无特殊意义,一般用来查看JSON文本封装成 数组 还是 对象(OC中为字典)
    NSString * jsonString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"-----------------------------%@",jsonString);
    
    NSString *dataStr=[NSString stringWithFormat:@"requestJson=%@",jsonString];
    
    
    
    //4.设置请求体
    request.HTTPBody = [dataStr dataUsingEncoding:NSUTF8StringEncoding];
    
    //设置请求头信息
    [request setValue:@"ios 9.0" forHTTPHeaderField:@"User-Agent"];
    
    //设置请求超时
    request.timeoutInterval = 60;
    
  
    //将请求的url数据放到NSData对象中
    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    //IOS5自带解析类NSJSONSerialization从response中解析出数据放到字典中
    //这里是完整的Json串
    NSDictionary *fullDic = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];
    
    
    NSArray *objectArray = [fullDic objectForKey:@"object"];
    
    NSLog(@"objectArray:%@",objectArray);
    
    
    //遍历输出object里的list
    
    for(NSDictionary *aObject in objectArray){
        NSArray *attendArray = [aObject objectForKey:@"list"];
        
        NSInteger count=0;
        
        for(NSDictionary *aAttend in attendArray){
            
            
            NSString *id = [aAttend objectForKey:@"id"];
            NSString *isClock = [aAttend objectForKey:@"isClock"];
            NSString *date = [aAttend objectForKey:@"date"];
            
            if(count == 0){
                //1.分别给控件设置状态
                //1.1 日期设置好
//                labelDate.text=date;
                //1.2 设置上班打卡状态
//                if([isClock isEqualToString:@"1"]){
//                    [amBtn setTitle:@"已打卡" forState:UIControlStateNormal];
//                }else if([isClock isEqualToString:@"0"]){
//                    [amBtn setTitle:@"未打卡" forState:UIControlStateNormal];
//                }
             
//                [amBtn setTitle:isClock forState:UIControlStateNormal];
                
                //1.3 设置id
                labelAmId.text=id;
                NSLog(@"id:%@",id);
            }else if (count ==1 ){
                //2.分别给控件设置状态
                //2.2 设置下班打卡状态
//                if([isClock isEqualToString:@"1"]){
//                    [amBtn setTitle:@"已打卡" forState:UIControlStateNormal];
//                }else if([isClock isEqualToString:@"0"]){
//                    [amBtn setTitle:@"未打卡" forState:UIControlStateNormal];
//                }
                //1.3 设置id
                labelPmId.text=id;
                NSLog(@"id:%@",id);
            }
            count++;
            
        }

        
        
        
    }
    
    
   
    NSLog(@"attendency字典里面的内容为--》%@", fullDic );
    
    
    
    //1.点击此按钮后,将未打卡的状态全部置成已打卡
    //1.1 设置日期
//    labelDate.text=[weatherInfo objectForKey:@"city"];//1
    
    //1.2 设置上班打卡状态
//    [amBtn setTitle:[weatherInfo objectForKey:@"city"] forState:UIControlStateNormal];

    //1.3 设置下班打卡状态
//    [pmBtn setTitle:[weatherInfo objectForKey:@"city"] forState:UIControlStateNormal];
    
    
}


- (IBAction)amBtnClick:(id)sender {
    
    
    //1.确定请求路径
    NSURL *url = [NSURL URLWithString:@"http://apistore.baidu.com/microservice/weather?cityid=101010100"];
    
    //2.创建可变的请求对象
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    
    //3.修改请求方法为POST(大写)
    request.HTTPMethod = @"POST";
    
    //4.设置请求体
    //request.HTTPBody = [@"username=dede&pwd=ede&type=JSON" dataUsingEncoding:NSUTF8StringEncoding];
    
    //设置请求头信息
    [request setValue:@"ios 9.0" forHTTPHeaderField:@"User-Agent"];
    
    //设置请求超时
    request.timeoutInterval = 10;
    
    
    NSError *error;
       //将请求的url数据放到NSData对象中
    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    //IOS5自带解析类NSJSONSerialization从response中解析出数据放到字典中
    NSDictionary *weatherDic = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];
    NSDictionary *weatherInfo = [weatherDic objectForKey:@"retData"];
    NSString *str = [NSString stringWithFormat:@"今天是 %@  %@  %@  的天气状况是:%@  %@ ",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"], [weatherInfo objectForKey:@"weather1"], [weatherInfo objectForKey:@"temp1"]];
    NSLog(@"weatherInfo字典里面的内容为--》%@", weatherDic );
    
    NSLog(@"%@", str );

    
    //1.2 设置上班打卡状态
    [amBtn setTitle:[weatherInfo objectForKey:@"city"] forState:UIControlStateNormal];
    
    
    
    
    
    NSLog(@"amBtn...");
}



- (IBAction)pmBtnClick:(id)sender {
    
    
    NSError *error;
    //加载一个NSURL对象
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://apistore.baidu.com/microservice/weather?cityid=101010100"]];
    //将请求的url数据放到NSData对象中
    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    //IOS5自带解析类NSJSONSerialization从response中解析出数据放到字典中
    NSDictionary *weatherDic = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];
    NSDictionary *weatherInfo = [weatherDic objectForKey:@"retData"];
    NSString *str = [NSString stringWithFormat:@"今天是 %@  %@  %@  的天气状况是:%@  %@ ",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"], [weatherInfo objectForKey:@"weather1"], [weatherInfo objectForKey:@"temp1"]];
    NSLog(@"weatherInfo字典里面的内容为--》%@", weatherDic );
    
    NSLog(@"%@", str );

    //1.3 设置下班打卡状态
    [pmBtn setTitle:[weatherInfo objectForKey:@"city"] forState:UIControlStateNormal];
    
    
    NSLog(@"amBtn...");
    
}




@end

 

 

 

分享到:
评论

相关推荐

    Delphi XE5 IOS 解析Json格式

    在Delphi XE5中使用SuperObject解析JSON数据,首先需要引入SuperObject相关的单元,如`SuperObject.pas`。然后,可以使用`SO()`函数创建一个空的JSON对象,或用`Parse()`方法解析一个JSON字符串: ```delphi uses ...

    iOS下json解析工具

    iOS下解析json数据,自己亲自使用过,挺好用的。 使用JSONKit的解析方法:(需导入包:#import "JSONKit/JSONKit.h") - (void)printJson{ //如果json是“单层”的,即value都是字符串、数字,可以使用...

    ios下解析json的demo

    本文将深入探讨如何在iOS环境下利用官方工具包解析JSON数据,以供开发者参考。 首先,我们需要了解JSON的基本结构。JSON是一种轻量级的、人可读的数据格式,主要用于存储和传输数据。其基本元素包括对象(object)...

    IOS之JSON数据解析

    本文将深入探讨如何在iOS中解析JSON数据,以“IOS之JSON数据解析”为主题,结合标签“源码”和“工具”,我们将讨论如何使用SBJson框架进行JSON的解析。 首先,JSON是一种轻量级的、易于人阅读和编写的数据格式,...

    ios下json数据解析的TouchJson的库

    接下来,我们来看一下如何使用TouchJson解析JSON数据。假设你已经从服务器获取到了一个JSON字符串,你可以使用以下步骤进行解析: 1. 将JSON字符串转换为NSData对象: ```objc NSString *jsonString = @"{ \"key\":...

    IOS json解析

    除了Apple提供的标准库,还有一些第三方库如SwiftyJSON、Decodable等,它们提供了更简洁易用的API来解析JSON。例如,SwiftyJSON允许我们直接通过点语法访问JSON对象,使得代码更加清晰。 总结来说,"IOS json解析...

    iOS xml解析和json解析demo

    总结一下,这个"iOS xml解析和json解析demo"将涵盖如何在iOS应用中解析XML数据,包括使用NSXMLParser和XMLParser,以及如何解析和序列化JSON数据,包括使用内置的JSONSerialization类和可能涉及的一些第三方库。...

    ios下三种解析json的库 sbjson TouchJson JSONKit

    - 提供了深度复制功能,可以在解析JSON时创建对象的完整副本。 - 由于不依赖于Foundation框架的JSON支持,因此适用于较旧的iOS版本。 3. **JSONKit** JSONKit是John Engelhart开发的高性能JSON解析库,它一度是...

    iOS-json转模型可视化工具

    在iOS开发中,数据解析是不可或缺的一环,而将JSON数据转换为模型对象可以极大地提高开发效率。"iOS-json转模型可视化工具"就是一个专为此目的设计的实用工具,它提供了可视化的界面,使得开发者能够方便地将JSON...

    ios下json数据解析的实例

    本文将深入探讨在iOS环境下如何解析JSON数据,以“ios下json数据解析的实例”为主题,结合提供的代码示例——JsonDemo,进行详细讲解。 首先,我们需要了解JSON的基本结构。JSON是一种轻量级的数据交换格式,它基于...

    IOS JSON 解析工具类代码

    JSONKit 是一个针对 iOS 平台的 JSON 解析库,被广泛认为是性能优秀且使用简便的工具之一。在 iOS 开发中,JSON(JavaScript Object Notation)是一种常见的数据交换格式,由于其轻量级、易读易写的特点,常用于...

    IOS开发 json实例

    1. **解析JSON**:当从网络请求中接收到JSON数据时,可以使用`NSJSONSerialization`的`JSONObjectWithData:options:error:`方法将其转换为Objective-C的对象,如NSArray或NSDictionary。 ```objc NSData *jsonData ...

    IOS抓包工具和JSON解析工具

    在iOS开发过程中,有时我们需要对网络请求进行抓包来查看数据传输的过程,或者解析JSON数据以便更好地理解服务器返回的信息。本文将详细介绍iOS平台上的抓包工具及JSON解析工具的使用。 首先,我们来讨论iOS抓包...

    iOS开发Json解析Demo

    // 解析JSON数据 }.resume() ``` 4. **模型对象与JSON映射** 为了更好地管理和操作数据,开发者通常会创建对应的模型对象,将JSON数据映射到这些对象上。比如,我们可以创建一个`Book`类,然后用`...

    ios中解析json对象基类

    本文将深入探讨如何在Objective-C中解析JSON对象,并基于标题和描述,我们将关注一个基类`BaseObjectFromJson`,以及辅助工具类`objcUtils`。 首先,我们来了解JSON的基本结构。JSON是一种轻量级的数据格式,它允许...

    IOS json解析成Model

    本主题主要探讨如何在iOS应用中将JSON数据解析成Model对象。 标题中的"IOS json解析成Model"指的是一个关键的开发任务:将JSON字符串或字典转换为自定义的Model类实例。这一过程能够帮助开发者将复杂的数据结构转换...

    unity JSON完美解析,IOS和Android完美支持

    完美支持UNITY中JSON的解析和生成。IOS和Android 完全支持,比SimpleJSON更强大。c#版本

    iOS_JSON_解析

    本篇将详细介绍在iOS中解析JSON数据的六种方法,这些方法都是可以直接运行的。 1. **NSJSONSerialization**: iOS内置了`NSJSONSerialization`类,它提供了方便的方法来解析和序列化JSON数据。要解析JSON,可以...

    浅谈ios中的json解析(转载)

    - 解析JSON数据: ```swift do { if let jsonObject = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any] { // 处理解析后的JSON对象 } } catch { print("Error parsing ...

    ios-json解析与数据字典

    2. **解析JSON数据**:然后,使用`NSJSONSerialization`的`JSONObjectWithData`方法将JSON数据转换为Swift的原生类型,如字典或数组。 ```swift do { if let jsonObject = try NSJSONSerialization....

Global site tag (gtag.js) - Google Analytics