24、JSON与OC互相转化
一、 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互相转化的更多相关文章
- json与String的转化
String转成jsonObject JsonObject json = JsonObject.fromObject(String str) String转成JsonArray J ...
- json对象和json字符串之间的转化
json对象和json字符串之间的转化 json字符串----->json对象 使用JSON.parse()函数 var jsonStr = '{"name":"z ...
- java对象与Json字符串之间的转化(fastjson)
1. 首先引入jar包 在pom.xml文件里加入下面依赖: <dependency> <groupId>com.alibaba</groupId> <art ...
- Python dict(或对象)与json之间的互相转化
Python dict(或对象)与json之间的互相转化 原文转载自 1.JSON:JavaScript 对象表示法,是轻量级的文本数据交换格式,独立于语言,平台 2.JSON 语法规则 数据在名称/ ...
- PHP/Post 提交请求获取json数据,并转化为所需要的数组
/** * Post 提交请求获取json数据,并转化为所需要的数组 */ function request_post($url = '', $param = '') { if (empty($url ...
- 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 ...
- java对象与Json字符串之间的转化
public class Test { public static void main(String[] args) { // 实现java对象与Json字符串之间的转化 // 1. Person对象 ...
- python之dict(或对象)与json之间的互相转化
在Python语言中,json数据与dict字典以及对象之间的转化,是必不可少的操作. 在Python中自带json库.通过import json导入. 在json模块有2个方法, loads():将 ...
- fastjson将json字符串中时间戳转化为日期
开发中,调用接口,往往会返回一个json字符串.对于json中的时间戳应该如何转为日期对象呢? 定义一个DateValueFilter类,这个类实现了fastjson中ValueFilter接口.其作 ...
随机推荐
- 第三章 列表(b)无序列表
- glove
glove - 必应词典 美[ɡlʌv]英[ɡlʌv] v.给戴手套:作…的手套 n.(分手指的)手套 网络分指手套:拳套:棒球之爱 变形复数:gloves:现在分词:gloving:过去分词:glo ...
- postman接口测试实例
牛刀小试项目 抽奖项目
- declare -A color
#!/bin/bash ## 声明变量 declare -A color # 定义颜色 # bc_color : background color color[red]="\e[1;31m& ...
- Java面试基础知识(2)
1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致. 2.说说& ...
- C语言中简单的for循环和浮点型变量
浮点型变量:常数中带有小数点的叫做浮点型 以下用for循环写一个摄氏度和华氏度的转换的C程序 [见 http://www.linuxidc.com/Linux/2013-08/88513.htm ] ...
- 使用PreparedStatement时,输出完整的SQL语句
使用psstmt时不能打印出完整的sql语句,挺不方便的,找到一个实现方法,记录下来. package com.zhh.function.util; import java.io.InputStrea ...
- nginx与php-fpm原理
一.正向代理与反向代理 1.正向代理:访问google.com google.com vpn需要FQ才能访问 vpn 对于我们来说是可以感知到的(我们连接vpn),但对于google服务器是不知道 ...
- .net 技术地图
以下是技术牛人,灵感之源.在于15年7月23日归类的一个技术地图 主要包括10个大类.50个子类 http://jingyan.baidu.com/article/4ae03de344f9b33eff ...
- andorid UI事件