iOS开发网络篇—JSON介绍

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 一、什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外)   JSON的格式很像OC中的字典和数组 {"name" : "jack", "age" : 10} {"names" : ["jack", "rose", "jim"]} 标准JSON格式的注意点:key必须用双引号   要想从JSON中挖掘出具体数据,得对JSON进行解析。

一、什么是JSON

JSON是一种轻量级的数据格式,一般用于数据交互

服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外)

 

JSON的格式很像OC中的字典和数组

{"name" : "jack", "age" : 10}

{"names" : ["jack", "rose", "jim"]}

标准JSON格式的注意点:key必须用双引号

 

要想从JSON中挖掘出具体数据,得对JSON进行解析。即把JSON 转换为 OC数据类型

 

二、JSON – OC 转换对照表

对照关系

 

三、JSON解析方案

1.在iOS中,JSON的常见解析方案有4种

(1)第三方框架:JSONKit、SBJson、TouchJSON(性能从左到右,越差) 

(2)苹果原生(自带):NSJSONSerialization(性能最好)

 

2.NSJSONSerialization的常见方法

(1)JSON数据 ——》 OC对象

+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;

 

(2)OC对象 ——》 JSON数据 

+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;

3.解析来自服务器的JSON示意图

四、部分代码示例

复制代码
 1 #import "YYViewController.h"
 2 #import "MBProgressHUD+MJ.h"
 3 
 4 @interface YYViewController ()
 5 @property (weak, nonatomic) IBOutlet UITextField *username;
 6 @property (weak, nonatomic) IBOutlet UITextField *pwd;
 7 - (IBAction)login;
 8 
 9 @end
10 
11 @implementation YYViewController
12 
13 - (IBAction)login {
14 //    1.提前的表单验证
15     if (self.username.text.length==0) {
16         [MBProgressHUD showError:@"请输入用户名"];
17         return;
18     }
19     if (self.pwd.text.length==0) {
20         [MBProgressHUD showError:@"请输入密码"];
21         return;
22     }
23 //    2.发送请求给服务器(带上账号和密码)
24     //添加一个遮罩,禁止用户操作
25     [MBProgressHUD showMessage:@"正在努力加载中...."];
26 
27 //
28 //    1.设置请求路径
29 //    NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text];
30 //    NSURL *url=[NSURL URLWithString:urlStr];
31     
32     // 1.设置请求路径
33     NSURL *URL=[NSURL URLWithString:@"http://192.168.1.53:8080/MJServer/login"];//不需要传递参数
34     
35 //    2.创建请求对象
36     NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:URL];//默认为get请求
37     request.timeoutInterval=5.0;//设置请求超时为5秒
38     request.HTTPMethod=@"POST";//设置请求方法
39     
40     //设置请求体
41     NSString *param=[NSString stringWithFormat:@"username=%@&pwd=%@",self.username.text,self.pwd.text];
42     //把拼接后的字符串转换为data,设置请求体
43     request.HTTPBody=[param dataUsingEncoding:NSUTF8StringEncoding];
44     
45     //客户端类型,只能写英文
46     [request setValue:@"ios+android" forHTTPHeaderField:@"User-Agent"];
47     
48 //    3.发送请求
49     //获取一个主队列
50     NSOperationQueue *queue=[NSOperationQueue mainQueue];
51     [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
52         //当请求结束的时候调用(有两种结果,一个是成功拿到数据,也可能没有拿到数据,请求失败)
53         [MBProgressHUD hideHUD];
54         if (data) {//请求成功
55             NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
56             //判断后,在界面提示登录信息
57             NSString *error=dict[@"error"];
58             if (error) {
59                 [MBProgressHUD showError:error];
60             }else
61             {
62                 NSString *success=dict[@"success"];
63                 [MBProgressHUD showSuccess:success];
64             }
65         }else   //请求失败
66         {
67             [MBProgressHUD showError:@"网络繁忙,请稍后重试!"];
68         }
69     }];
70     NSLog(@"请求发送完毕");
71 }
72 @end


转:
http://www.cnblogs.com/wendingding/p/3815303.html
如何联系我:【万里虎】www.bravetiger.cn 【QQ】3396726884 (咨询问题100元起,帮助解决问题500元起) 【博客】http://www.cnblogs.com/kenshinobiy/
目录
相关文章
|
2月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
20天前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
111 66
|
6天前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
|
2月前
|
API
鸿蒙开发:切换至基于rcp的网络请求
本文的内容主要是把之前基于http封装的库,修改为当前的Remote Communication Kit(远场通信服务),无非就是通信的方式变了,其他都大差不差。
102 4
鸿蒙开发:切换至基于rcp的网络请求
|
30天前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
|
1月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
2月前
|
存储 前端开发 Swift
探索iOS开发:从新手到专家的旅程
本文将带您领略iOS开发的奇妙之旅,从基础概念的理解到高级技巧的掌握,逐步深入iOS的世界。文章不仅分享技术知识,还鼓励读者在编程之路上保持好奇心和创新精神,实现个人成长与技术突破。
|
2月前
|
存储 网络协议 物联网
C 语言物联网开发之网络通信与数据传输难题
本文探讨了C语言在物联网开发中遇到的网络通信与数据传输挑战,分析了常见问题并提出了优化策略,旨在提高数据传输效率和系统稳定性。
|
2月前
|
安全 IDE Swift
探索iOS开发之旅:从初学者到专家
在这篇文章中,我们将一起踏上iOS开发的旅程,从基础概念的理解到深入掌握核心技术。无论你是编程新手还是希望提升技能的开发者,这里都有你需要的指南和启示。我们将通过实际案例和代码示例,展示如何构建一个功能齐全的iOS应用。准备好了吗?让我们一起开始吧!
|
2月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
34 2