一、 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];

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

(2)OC对象->JSON对象

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

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

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

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

方法一:
在线格式化http://tool.oschina.net/codeformat/json
方法二:
把解析后的数据写plist文件,通过plist文件可以直观的查看JSON的层次结构。
[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. hdu 2089 数位dp

    链接:https://vjudge.net/problem/23625/origin 中文,题目不用说了. 其实这题的数据很小,所以直接暴力也可以过,但是还是要学会数位dp,因为并不是每一题的数据都会 ...

  2. CentOS7中编译安装redis5.0

    1. 环境介绍 CentOS7 (未安装Development Tools) 2. 下载Redis5.0-rc3 wget -O redis-5.0-rc3.tar.gz https://github ...

  3. 这篇说的是Unity Input 输入控制器

    关于Unity3D是什么.我就不多做解释了.由于工作原因,该系列原创教程不定期更新.每月必然有更新.谢谢各位 Unity Input---输入控制管理器: Edit->Project Setti ...

  4. Android Studio生成签名安装包(Generate Signed APK)

    一 打开构建对话框. 二 创建新的密钥库(key store) 可以选择已创建的密钥库,也可以选择创建新的密钥库. 创建完成后,自动导入. 三 选择签名类型. 如果不选,会提示错误. 这里将新旧两种签 ...

  5. TZOJ 4712 Double Shortest Paths(最小费用最大流)

    描述 Alice and Bob are walking in an ancient maze with a lot of caves and one-way passages connecting ...

  6. swift4.2 - 一个自定义view弹框

    import UIKit /* * 注册协议view:没找到 UI原图,咱不实现 */ class JYRegisterProtocolView: UIView { /// 点击同意协议的回调 pri ...

  7. sqlserver数据库的物理存储格式和逻辑存储格式

    物理存储结构: 数据库文件在磁盘上的存储形式: 主数据文件:*.mdf.用来存储数据库的启动信息.存储部分或全部的数据.整个的数据库只能有一个主数据文件 辅助数据文件:*.ndf.用于存储主数据文件未 ...

  8. Query to find the eligible indexes for rebuilding

    Query to find the eligible indexes for rebuilding The following script can be used to determine whic ...

  9. Three.js粒子特效,shader渲染初探(一篇非常详细的介绍)

    Three.js粒子特效,shader渲染初探 转载来源:https://juejin.im/post/5b0ace63f265da0db479270a 这大概是个序 关于Three.js,网上有不多 ...

  10. devexpress 如何读demo源码 总结

    对于初学这个庞大的控件集合的程序猿来讲应该是有些难度的.今天就devexpress  demo 里边一些东西就本人的所学做一下引导吧. dev 有个帮助文件 DevExpress 中文帮助文档 和每个 ...