⑴ iOS - jsONEncoder和JSONDecoder介绍
Xcode 9, iOS 11 ,Swift 4出现 JSONEncoder 和 JSONDecoder 来实现JSON格式的编解码
编码数据为JSON对象
简单使用
定义杂货食品结构体,并遵守 Codable 协议
Codable 协议为可编解码协议的类型别名
编码例子
运行输出
也可以设置输出格式为 sortedKeys ,对keys进行排序
运行输出
将迹圆JSON对象解码成对应的实例数据
简单使用
运行输出
初始化内容
Employee包含Toy属性,属于嵌套类型(nested type)
运行输出
camel case 表示驼峰形式(如:looksLikeThis)
snake case 表示下伍州贺划线形式(如:looks_like_this_instead)
运行输出
使用自定义key,这里使用gift替换favoriteToy
编解码实现同上
运行输出
去除嵌套类型,实现如下数据结构
修改 Employee 结构体,单独实现编解码协议
初始化内容同上
实现身层级JSON数据
可以看到name属性在toy之内,toy属性在gift之内,为了实现该数据结构,需要为gift属性使用嵌套key容器(nested keyed containers)
运行上面测试内容输出
实现日期的编解码
简单使用
运行输出
实现编解码子类
简单使用
运行输出
复杂类型的编解码
简单使腔派用
运行输出
数组的编解码
简单使用
运行输出
对象数据结构中拥有数组的编解码
简单使用
运行输出
JSONEncoder
JSONDecoder
Encoding-and-decoding-in-swift
⑵ ios中将nsdata类型的数据放到字典里,在封装成json可以吗
首先需要确定你的json解析出来的是什么类型的,下面提供的是NSData型的,如果解析出来是其他类型需要先转为NSData: NSData *data; NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
⑶ ios怎么创建一个json文件
json文件和plist文件类似,只是json多一步解析的操作; 现在常用的解析如下; NSString *path = [[NSBundle mainBundle] pathForResource:@"mJson" ofType:@"json"]; NSData *jsonData = [NSData dataWithContentsOfFile:path options:NSDataReadingMappedIfSafe error:nil]; NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData options: error:nil]; 得到字典类型的数据后就可以使用了
⑷ iOS开源JSON解析库MJExtension
iOS中JSON与NSObject互转有两种方式:1、iOS自带类NSJSONSerialization 2、第三方开源库SBJSON、JSONKit、MJExtension。项目中一直用MJExtension来进行闭毕基JSON与Model的互转,非常方便、强大,接下来介绍一下这个轻量、强大的开源库。
1、什么是MJExtension?
MJExtension是一套字典和模型之间互相转换的轻量级开源框架,github地址为: GitHub - CoderMJLee/MJExtension: A fast 。功能如下:
2、MJExtension架构
1)UML类图
2)类介绍
3、MJExtension JSON转Model流程图
4、MJExtension用法举例
关于用法详情请见: GitHub - CoderMJLee/MJExtension: A fast 。我这里只介绍两数族种常用的用法,JSON转Model,JSON转Model数组轿谨
⑸ ios中怎样用json
可以盯饥使用NSDictionary中的键值对来拼接Json数据,非常方便,也可以进行嵌套,直接上代码:
//开始拼接Json字符串
NSDictionary *dataDictionary= [NSDictionary dictionaryWithObjectsAndKeys:@"mac",@"mac",
@"毕则锋game",@"game",
@"devicetoken",@"devicetoken",
@"device",@"device",
@"gv",@"gv",
@"lang",@"lang",
@"os",@"os",nil];
NSDictionary *parmDictionary= [NSDictionary dictionaryWithObjectsAndKeys:@"getSession",@"act",
dataDictionary,@"data",nil];
NSDictionary *jsonDictionary=[NSDictionary dictionaryWithObjectsAndKeys:@"pv",@"pv",
parmDictionary,@"param",nil];
SBJsonWriter *writer = [[SBJsonWriter alloc] init];
NSString *jasonString = [writer stringWithObject:jsonDictionary];
NSLog(@"手晌%@",jasonString);
⑹ ios开发怎么向工程中添加json文件
JSON 一般是从网络接口中请求的一段数据吧.首先你要向服务器发送一个请求,得到一段JSON,然后解析一下就行了.用到ASIHTTPRequest和SBJSON两个第三方的开源类库.
NSURL * url = [NSURL URLWithString:[urlString :NSUTF8StringEncoding]];
sendRequest = [ASIHTTPRequest requestWithURL:url];
[sendRequest setTimeOutSeconds:30];
[sendRequest setDelegate: self];
[sendRequest startAsynchronous];
- (void)requestFinished:(ASIHTTPRequest *)request
{
NSString *responseString = [request responseString];
if (responseString==nil || [responseString JSONValue] == nil) {
return;
}
NSDictionary *responseDict = [responseString JSONValue];
int result = [[responseDict objectForKey:@"status"] intValue];
if (result == 1) {
NSArray *location = [responseDict objectForKey:@"locations"];
...............................
}
⑺ 怎么生成和解析iOS开发JSON格式数据
导语:JSON作为数据包格式传输的时候具有更高的效率,这是因为JSON不像XML那样需要有严格的闭合标签,这就让有效数据量与总数据包比大大提升,从而减少同等数据流量的情况下,网络的传输压力。JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是JavaScript很容易解释它,而且 JSON 可以表示比"名称 / 值对"更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。
一、如何生成JSON格式的'数据?
1、利用字典NSDictionary转换为键/值格式的数据。
// 如果数组或者字典中存储了 NSString, NSNumber, NSArray, NSDictionary, or NSNull 之外的其他对象,就不能直接保存成文件了.也不能序列化成 JSON 数据.
NSDictionary *dict = @{@"name" : @"me", @"do" : @"something", @"with" : @"her", @"address" : @"home"};
// 1.判断当前对象是否能够转换成JSON数据.
// YES if obj can be converted to JSON data, otherwise NO
BOOL isYes = [NSJSONSerialization isValidJSONObject:dict];
if (isYes) {
NSLog(@"可以转换");
/* JSON data for obj, or nil if an internal error occurs. The resulting data is a encoded in UTF-8.
*/
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:NULL];
/*
Writes the bytes in the receiver to the file specified by a given path.
YES if the operation succeeds, otherwise NO
*/
// 将JSON数据写成文件
// 文件添加后缀名: 告诉别人当前文件的类型.
// 注意: AFN是通过文件类型来确定数据类型的!如果不添加类型,有可能识别不了! 自己最好添加文件类型.
[jsonData writeToFile:@"/Users/SunnyBoy/Sites/JSON_XML/dict.json" atomically:YES];
NSLog(@"%@", [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]);
} else {
NSLog(@"JSON数据生成失败,请检查数据格式");
}
2、通过JSON序列化可以转换数组,但转换结果不是标准化的JSON格式。
NSArray *array = @[@"qn", @18, @"ya", @"wj"];
BOOL isYes = [NSJSONSerialization isValidJSONObject:array];
if (isYes) {
NSLog(@"可以转换");
NSData *data = [NSJSONSerialization dataWithJSONObject:array options:0 error:NULL];
[data writeToFile:@"/Users/SunnyBoy/Sites/JSON_XML/base" atomically:YES];
} else {
NSLog(@"JSON数据生成失败,请检查数据格式");
}
二、如何解析JSON格式的数据?
1、使用TouchJSon解析方法:(需导入包:#import "TouchJson/JSON/CJSONDeserializer.h")
//使用TouchJson来解析北京的天气
//获取API接口
NSURL *url = [NSURL URLWithString:@"http://m.weather.com.cn/data/101010100.html"];
//定义一个NSError对象,用于捕获错误信息
NSError *error;
NSString *jsonString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
NSLog(@"jsonString--->%@",jsonString);
//将解析得到的内容存放字典中,编码格式为UTF8,防止取值的时候发生乱码
NSDictionary *rootDic = [[CJSONDeserializer deserializer] deserialize:[jsonString dataUsingEncoding:NSUTF8StringEncoding] error:&error];
//因为返回的Json文件有两层,去第二层内容放到字典中去
NSDictionary *weatherInfo = [rootDic objectForKey:@"weatherinfo"];
NSLog(@"weatherInfo--->%@",weatherInfo);
//取值打印
NSLog(@"%@",[NSString stringWithFormat:@"今天是 %@ %@ %@ 的天气状况是:%@ %@ ",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"], [weatherInfo objectForKey:@"weather1"], [weatherInfo objectForKey:@"temp1"]]);
2、使用SBJson解析方法:(需导入包:#import "SBJson/SBJson.h")
//使用SBJson解析北京的天气
NSURL *url = [NSURL URLWithString:@"http://www.weather.com.cn/adat/sk/101010100.html"];
NSError *error = nil;
NSString *jsonString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
SBJsonParser *parser = [[SBJsonParser alloc] init];
NSDictionary *rootDic = [parser objectWithString:jsonString error:&error];
NSDictionary *weatherInfo = [rootDic objectForKey:@"weatherinfo"];
NSLog(@"%@", [NSString stringWithFormat:@"今天是 %@ %@ %@ 的天气状况是:%@ %@ ",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"], [weatherInfo objectForKey:@"weather1"], [weatherInfo objectForKey:@"temp1"]]);
3、使用IOS5自带解析类NSJSONSerialization方法解析:(无需导入包,IOS5支持,低版本IOS不支持)
// 从中国天气预报网请求数据
NSURL *url = [ NSURL URLWithString:@"http://www.weather.com.cn/adat/sk/101010100.html"];
// 创建请求
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
// 在网络完成的 Block 回调中,要增加错误机制.
// 失败机制处理: 错误的状态码!
// 最简单的错误处理机制:
if (data && !error) {
// JSON格式转换成字典,IOS5中自带解析类NSJSONSerialization从response中解析出数据放到字典中
id obj = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
NSDictionary *dict = obj[@"weatherinfo"];
NSLog(@"%@---%@", dict, dict[@"city"]);
}
}] resume];
4、使用JSONKit的解析方法:(需导入包:#import "JSONKit/JSONKit.h")
//如果json是“单层”的,即value都是字符串、数字,可以使用objectFromJSONString
NSString *json1 = @"{"a":123, "b":"abc"}";
NSLog(@"json1:%@",json1);
NSDictionary *data1 = [json1 objectFromJSONString];
NSLog(@"json1.a:%@",[data1 objectForKey:@"a"]);
NSLog(@"json1.b:%@",[data1 objectForKey:@"b"]);
//如果json有嵌套,即value里有array、object,如果再使用objectFromJSONString,程序可能会报错(测试结果表明:使用由网络或得到的php/json_encode生成的json时会报错,但使用NSString定义的json字符串时,解析成功),最好使用:
NSString *json2 = @"{"a":123, "b":"abc", "c":[456, "hello"], "d":{"name":"张三", "age":"32"}}";
NSLog(@"json2:%@", json2);
NSDictionary *data2 = [json2 :JKParseOptionLooseUnicode];
NSLog(@"json2.c:%@", [data2 objectForKey:@"c"]);
NSLog(@"json2.d:%@", [data2 objectForKey:@"d"]);
⑻ ios 怎么把参数包装成json
方法/步骤
为了验证我们的数据的转换,我们这里新建一个项目来演示。名字就随便取一个好了,但是在我们做项目的时候,名字还是要规范一点的好,这样也方便我们后期通过项目名称就能知道我们这个项目里边实现了什么功能,然后就可以直接从这个项目来取我们需要的东西。
现在我们开始编写把dictionary转化为json的方法,这里我就直接写在新建一个项目的时候的默认的控制器ViewController的.m文件里了。大家可以在需要的地方编写,有必要的话,也可以单独写成一个分类,看个人爱好。
这里的dic是这里用来测试的数据,我用的是一个dictionary来测试,当然了,如果不是dictionary而是array等,也是可以的,方法都是一样的。这里我没有对error做处理,如果担心转换的时候出现错误,也可以对其做一定的处理。
现在我们通过
NSLog(@"jsonString:%@",jsonString);
来打印看看结果是不是我们要的JSON格式。
点击左上角的三角符号,或者command+r 来运行我们的项目。看到结果如下,正式我们需要的样子。
我们看到上面打印出来的json是已经被格式化过的了,但是有时候我们需要往服务器传送的参数的格式要求是非常严格的,要求就是原始的json,不需要格式化,也就是一行。这个时候我们只需要修改NSJSONWritingPrettyPrinted就可以了,如下图所示:
6
现在我们再次打印出来看看,点击左上角的三角符号,或者command+r 来运行我们的项目。现在我们可以看到,json就是在一行了。其实有时候就是对这些数据的细节处理很烦人,看似简单,有时候没有找到问题所在就会让你头疼好久。
⑼ ios开发,要获取一个json数据量很大,上千条,怎么处理
分页请求 闲自己封装麻烦可以使用AFNetworking+MJRefresh第三方类库, 前者神举解决各种请求问题, 后者提供瞎前UIScrollView及其派生VIew的下拉刷新(滑到底也游神碧可加载请求新数据, 以及各种DIY) 有兴趣还可以配合使用 MVVM+ReactiveCocoa, 分离逻辑层
⑽ ios 怎么xcode制作json格式文件
1. 如何下载ios7模拟器
点击xcode,选择“Preferences”,选择“downloads”,就可以看见IOS 7.1,不过下载有点慢。
2. 如何快速下载呢
进入目录/Users//Library/Caches/com.apple.dt.Xcode/Downloads 将.dvtdownloadableindex 类似文件重命名成.plist后缀文件。
3.安装完ios,如何使xcode使用
ios安装的目录:/Users/username/Library/Application Support/iPhone Simulator
目录位置都一样,都是在Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs里面
然后重启Xcode应该就可以了。