一、 JSON:

1.

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

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

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

{“na'me”:"jack","age":10}

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

标准JSON中中挖掘出具体的数据,需要对JSON进行解析  JSON转换为OC数据类型

JSON解析方案

a. 第三方框架 JSONKit\SBJSON\TouchJSON

b.苹果原生(NSJSONNSerialization)

03、JSON和OC转换对照表

JSON                   OC

大括号{}               NSDictionary

中括号【】             NSArray

双引号“”                NSString

数字10、10.8        NSNumber

2.JSON解析相关代码

(1)json数据->OC对象

//把JSON数据转换为OC对象

-(void)jsonToOC

{

//1.确定url路径

NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32182/login?username="nan"&pwd="123456"&type=json"];

//2.创建一个请求对象

NSURLRequest *request = [NSURLRequest requestWithURL:url];

  1. //3.使用NSURLSession发送一个异步请求
  2. [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
  3. //4.当接收到服务器响应的数据后,解析数据(JSON--->OC)
  4. /*
  5. 第一个参数:要解析的JSON数据,是NSData类型也就是二进制数据
  6. 第二个参数: 解析JSON的可选配置参数
  7. NSJSONReadingMutableContainers 解析出来的字典和数组是可变的
  8. NSJSONReadingMutableLeaves 解析出来的对象中的字符串是可变的 iOS7以后有问题
  9. NSJSONReadingAllowFragments 被解析的JSON数据如果既不是字典也不是数组, 那么就必须使用这个
  10. */
  11. NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
  12. NSLog(@"%@",dict);
  13. }];
  14. }

(2)OC对象->JSON对象

  1. //1.要转换成JSON数据的OC对象*这里是一个字典
  2. NSDictionary *dictM = @{
  3. @"hwm":@"是坏蛋",
  4. @"age":@100,
  5. @"height":@1.72
  6. };
  7. //2.OC->JSON
  8. /*
  9. 注意:可以通过+ (BOOL)isValidJSONObject:(id)obj;方法判断当前OC对象能否转换为JSON数据
  10. 具体限制:
  11. 1.obj 是NSArray 或 NSDictionay 以及他们派生出来的子类
  12. 2.obj 包含的所有对象是NSString,NSNumber,NSArray,NSDictionary 或NSNull
  13. 3.字典中所有的key必须是NSString类型的
  14. 4.NSNumber的对象不能是NaN或无穷大
  15. */
  16. /*
  17. 第一个参数:要转换成JSON数据的OC对象,这里为一个字典
  18. 第二个参数:NSJSONWritingPrettyPrinted对转换之后的JSON对象进行排版,无意义
  19. */
  20. NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:kNilOptions error:nil];// OC对象 -> JSON数据 [数据传输只能以进制流方式传输,所以传输给我们的是进制流,但是本质是JSON数据
  21. NSLog(@"%@", data);
  22. NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
  23. //3.打印查看Data是否有值
  24. /*
  25. 第一个参数:要转换为STring的二进制数据
  26. 第二个参数:编码方式,通常采用NSUTF8StringEncoding
  27. */
  28. NSLog(@"%@", data);
  29. NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);

(3)OC对象和JSON数据格式之间的一一对应关系

  1. //OC对象和JSON数据之间的一一对应关系
  2. -(void)oCWithJSON
  3. {
  4. //JSON的各种数据格式
  5. //NSString *test = @"\"windy听话\"";
  6. //NSString *test = @"true";
  7. NSString *test = @"{\"name\":\"windy听话\"}";
  8. //把JSON数据->OC对象,以便查看他们之间的一一对应关系
  9. //注意点:如何被解析的JSON数据如果既不是字典也不是数组(比如是NSString), 那么就必须使用这NSJSONReadingAllowFragments
  10. id obj = [NSJSONSerialization JSONObjectWithData:[test dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
  11. NSLog(@"%@", [obj class]);
  12. /* JSON数据格式和OC对象的一一对应关系
  13. {} -> 字典
  14. [] -> 数组
  15. "" -> 字符串
  16. 10/10.1 -> NSNumber
  17. true/false -> NSNumber
  18. null -> NSNull
  19. */
  20. }
  21. }

(4)如何查看复杂的JSON数据

  1. 方法一:
  2. 在线格式化http://tool.oschina.net/codeformat/json
  3. 方法二:
  4. 把解析后的数据写plist文件,通过plist文件可以直观的查看JSON的层次结构。
  5. [dictM writeToFile:@"/Users/hwm/Desktop/videos.plist" atomically:YES];

24、JSON与OC互相转化的更多相关文章

  1. json与String的转化

    String转成jsonObject    JsonObject   json = JsonObject.fromObject(String str) String转成JsonArray      J ...

  2. json对象和json字符串之间的转化

    json对象和json字符串之间的转化 json字符串----->json对象 使用JSON.parse()函数 var jsonStr = '{"name":"z ...

  3. java对象与Json字符串之间的转化(fastjson)

    1. 首先引入jar包 在pom.xml文件里加入下面依赖: <dependency> <groupId>com.alibaba</groupId> <art ...

  4. Python dict(或对象)与json之间的互相转化

    Python dict(或对象)与json之间的互相转化 原文转载自 1.JSON:JavaScript 对象表示法,是轻量级的文本数据交换格式,独立于语言,平台 2.JSON 语法规则 数据在名称/ ...

  5. PHP/Post 提交请求获取json数据,并转化为所需要的数组

    /** * Post 提交请求获取json数据,并转化为所需要的数组 */ function request_post($url = '', $param = '') { if (empty($url ...

  6. 1.4.1 对象与JSON转化 1.4.2 JSON与List集合转化 1.1.1 获取json中的属性 day10-05

    1.1.1 对象与JSON转化 @Test public void toJSON() throws IOException{ Jedis jedis = new Jedis("192.168 ...

  7. java对象与Json字符串之间的转化

    public class Test { public static void main(String[] args) { // 实现java对象与Json字符串之间的转化 // 1. Person对象 ...

  8. python之dict(或对象)与json之间的互相转化

    在Python语言中,json数据与dict字典以及对象之间的转化,是必不可少的操作. 在Python中自带json库.通过import json导入. 在json模块有2个方法, loads():将 ...

  9. fastjson将json字符串中时间戳转化为日期

    开发中,调用接口,往往会返回一个json字符串.对于json中的时间戳应该如何转为日期对象呢? 定义一个DateValueFilter类,这个类实现了fastjson中ValueFilter接口.其作 ...

随机推荐

  1. 第十一章 串 (c1)KMP算法:从记忆力到预知力

  2. Codeforces Beta Round #54 (Div. 2)

    Codeforces Beta Round #54 (Div. 2) http://codeforces.com/contest/58 A 找子序列 #include<bits/stdc++.h ...

  3. stm32DMA

    源和目标地址必须按数据传输宽度对齐 支持循环的缓冲器管理 可编程的数据传输数目:最大为65536 每一个通道都有一组寄存器 DMA_CPARx.DMA_CMARx是没有差别的,它们都可以存放外设的地址 ...

  4. ActiveMQ之java Api

    ActiveMQ 安全机制 activemq的web管理界面:http://127.0.0.1:8161/admin activemq管控台使用jetty部署,所以需要修改密码则需要修改相应的配置文件 ...

  5. redis其他相关知识

    Redis的安全性 因为redis速度很快,所以在一台比较好的服务器下,一个外部用户在一秒内可以进行15W次的密码尝试,这意味着你需要设定非常强大的密码来防止暴力破解. vim编辑redis.conf ...

  6. angular实现链接锚记

    前言: 之所以这么说,是因为angular的路由将html默认的链接锚记的#给占用了,所以传统的链接锚记在这里将不再适用,这个有点坑啊,又要多写好几行代码来模拟这个功能. 实现原理: location ...

  7. FortiGate密码恢复

    1.需求 1.若设备的密码忘记,需要用配置线进行密码恢复: 2.密码恢复需要重启设备,并在设备的底层菜单界面上操作,会造成网络中断,请在方便断网时操作: 3.密码恢复后配置不会改变. 2.操作步骤 1 ...

  8. Practice 10

    通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口. settext是根据数组新建的pets[1]object来的,对其调用抽象方法talk, ...

  9. linux命令学习之:systemctl

    systemctl命令是系统服务管理器指令,主要负责控制systemd系统和服务管理器,它实际上将 service 和 chkconfig 这两个命令组合到一起. CentOS 7.x开始,CentO ...

  10. 由于想要实现下载的文件可以进行选择,而不是通过<a>标签写死下载文件的参数,所以一直想要使用JFinal结合ajax实现文件下载,但是ajax实现的文件下载并不能触发浏览器的下载文件弹出框,这里通过模拟表单提交实现同样的效果。

    由于想要实现下载的文件可以进行选择,而不是通过<a>标签写死下载文件的参数,所以一直想要使用JFinal结合ajax实现文件下载(这样的话ajax可以传递不同的参数),但是ajax实现的文 ...