一丶简介
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。_摘抄自百度;
iOS对JSON数据的处理,我把它分为以下几个步骤 1.获取json数据; 2.建立模型; 3.连接数据; 4.生成description 二丶开始上干货 1.获取JSON数据:
1.1为了方便查看JSON数据可以使用以下网址:
可以格式化JSON代码
JSON在线解析及格式
JSON在线编辑器 示例数据 { "array": [ 1, 2, 3 ], "sex": true, "age": 12, "id":95757, "other": { "a": "b", "c": "d", "e": "f" }, "speak": "Hello World" } 2.建立模型
这里介绍2种自动生成属性方式:
2.1 插件
ESJsonFormat :https://github.com/EnjoySR/ESJsonFormat-XcodePaste_Image.png
效果图展示:
Paste_Image.png
2.2Json-Property-Creat-Code
Json-Property-Creat-Code
这个功能比较强大
json数据生成model 支持KVC,JSModel, model会自动归档 例如输入一个json数据网址,或者将返回的json数据放入展开的输入框中,再输入要生成的model名字,点击生成就可以在桌面上看到你所要的model 可以无限嵌套哦,总而言之,不需要你写一句代码,这个model可以直接使用
效果图展示:
Paste_Image.png
Paste_Image.png
好用,谁用谁知道;
3.连接数据;
3.1
MJExtension(https://github.com/CoderMJLee/MJExtension) **1> 字典 -> 模型 **2> 模型 -> 字典 **3> 字典数组 -> 模型数组 **4> 模型数组 -> 字典数组这个不多介绍了,里面介绍很详细,都是中文;
提下,用到系统关键字处理方法:
+ (NSDictionary*)mj_replacedKeyFromPropertyName { return@{@"theID":@"id"}; }3.2
还有一个YYKit
这个也不错,但是解析速度没有MJExtension快;
4.生成description思路:利用Runtime获取类的所有属性,然后遍历拼接成一个字符串;
代码已封装如下,继承使用
#import "BaseObject.h" static NSMutableDictionary *modelsDescription = nil; @implementation BaseObject + (void)load { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ modelsDescription = [NSMutableDictionary dictionary]; }); } - (NSDictionary *)mapPropertiesToDictionary { NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; Class cls = [self class]; uint ivarsCount = 0; Ivar *ivars = class_copyIvarList(cls, &ivarsCount); const Ivar *ivarsEnd = ivars + ivarsCount; for (const Ivar *ivarsBegin = ivars; ivarsBegin < ivarsEnd; ivarsBegin++) { Ivar const ivar = *ivarsBegin; NSString *key = [NSString stringWithUTF8String:ivar_getName(ivar)]; if ([key hasPrefix:@"_"]) key = [key substringFromIndex:1]; id value = [self valueForKey:key]; [dictionary setObject:value ? value : [NSNull null] forKey:key]; } if (ivars) { free(ivars); } return dictionary; } - (NSString *)description { NSMutableString *str = [NSMutableString stringWithFormat:@"------<%@>------\n", NSStringFromClass([self class])]; NSDictionary *dic = [self mapPropertiesToDictionary]; [dic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { [str appendFormat:@"< %@ = %@ >\n", key, obj]; }]; [str appendString:@"------<End>------"]; return str; } @end 三丶扩展:1.有时候服务器返回的JSON中,某个字典是以字符串形式展示,以下扩展,直接使用,不用谢;
@implementation NSString (Extension) - (NSDictionary *)dictionaryWithJsonString { if (self == nil) { return nil; } ]; NSError *err; &err]; if (err) { Log(@"json解析失败:%@", err); return nil; } return dic; } @end