版权声明:本文系KevinAshen灵感之火花,转载请申明,一起前行! https://blog.csdn.net/KevinAshen/article/details/83216635
使用API
参考的JSON数据(可能与你看到的不同)
{
"date": "20181020",
"stories": [
{
"title": "每周一吸 · 狸花猫",
"ga_prefix": "102013",
"images": [
"https://pic4.zhimg.com/v2-9ef6021d279be280f7d2ba0788e392a7.jpg"
],
"multipic": true,
"type": 0,
"id": 9698943
},
{
"images": [
"https://pic3.zhimg.com/v2-b752576f81b0a584bcf0e2ba96a07666.jpg"
],
"type": 0,
"id": 9698988,
"ga_prefix": "102012",
"title": "大误 · 救救马云"
},
{
"images": [
"https://pic2.zhimg.com/v2-8502d8246509a273ba97133e0064176d.jpg"
],
"type": 0,
"id": 9698610,
"ga_prefix": "102010",
"title": "药瓶上的「肝肾功能不全者慎用」,到底想表达什么?"
},
{
"images": [
"https://pic4.zhimg.com/v2-352a7a8539dfd84227b22c8574f327b7.jpg"
],
"type": 0,
"id": 9698819,
"ga_prefix": "102009",
"title": "孩子你终于长大了,2 岁正是学理财的好时候"
},
{
"images": [
"https://pic1.zhimg.com/v2-bad6709dfc4abe08b9cacf5c75c03d00.jpg"
],
"type": 0,
"id": 9698931,
"ga_prefix": "102008",
"title": "「生命之桥」上,失落的人们选择在这里结束生命"
},
{
"images": [
"https://pic4.zhimg.com/v2-1b3b1acab0c685beaa5428f33c7c6c03.jpg"
],
"type": 0,
"id": 9698898,
"ga_prefix": "102007",
"title": "作为电影导演 / 歌手,作品信息量这么大,我自己都不知道"
},
{
"images": [
"https://pic3.zhimg.com/v2-d7a69c5474650820fce977064458d35e.jpg"
],
"type": 0,
"id": 9699031,
"ga_prefix": "102007",
"title": "13 岁少女肢解同窗好友,也许我们都小看她了"
},
{
"images": [
"https://pic2.zhimg.com/v2-abe3c9ea2cdfe8051ea36154d30b4989.jpg"
],
"type": 0,
"id": 9698984,
"ga_prefix": "102006",
"title": "瞎扯 · 如何正确地吐槽"
}
],
"top_stories": [
{
"image": "https://pic4.zhimg.com/v2-9b704e39dc83ae7202fefc8d192e10f3.jpg",
"type": 0,
"id": 9699031,
"ga_prefix": "102007",
"title": "13 岁少女肢解同窗好友,也许我们都小看她了"
},
{
"image": "https://pic2.zhimg.com/v2-66f79486c79deb9d779f9af99e719091.jpg",
"type": 0,
"id": 9699060,
"ga_prefix": "101921",
"title": "影视圈惊变 2018"
},
{
"image": "https://pic4.zhimg.com/v2-e093102accf700073af6c3452293cd27.jpg",
"type": 0,
"id": 9698862,
"ga_prefix": "101719",
"title": "「56 个星座,56 支花」……等等,不是 56 个民族吗?"
},
{
"image": "https://pic4.zhimg.com/v2-76f03b3ab26c3d76be022a5281a13483.jpg",
"type": 0,
"id": 9698744,
"ga_prefix": "101810",
"title": "花海沦陷在抖音网红的臀下,想要提前避免,可能真没什么辙"
},
{
"image": "https://pic3.zhimg.com/v2-5babbbaa37cccaf467b996e9bc1aadda.jpg",
"type": 0,
"id": 9698809,
"ga_prefix": "101807",
"title": "大学校园沦为艾滋病重灾区?一直如此,形势也越来越严峻"
}
]
}
参考文章(阅读顺序排列, 对于基本的不再赘述)
GitHub地址
易错点
- 可以看到我们要解析的这个JSON数据是相当复杂的, 他有嵌套, 有数组, 需要一次解析, 在阅读了上面的文章以后, 应该对如何处理有了自己的看法, 我这里放一个我觉得比较好的的方法。
- 首先要说明一下, JSONModel的作用说白了就是将JSON数据依照关键字,变成一个类的属性, 方便使用, 它的强大之处在于能够完成数据形式的转换
- 那么我要说的是, 在嵌套数据时, 我们应该对每一个要嵌套的都写成一个类,但并不是意味着要写成多个类文件,而是只需要在一个类文件里把该有的写好就行
//
// Top_storiesJSONModel.h
// JSONModel-exerciseDemo
//
// Created by mac on 2018/10/19.
// Copyright © 2018 姜凯文. All rights reserved.
//
#import "JSONModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface Top_storiesJSONModel : JSONModel
@property (nonatomic, strong) NSArray *images;
@property (nonatomic, strong) NSString *type;
@property (nonatomic, strong) NSString *id;
@property (nonatomic, strong) NSString *ga_prefix;
@property (nonatomic, strong) NSString *title;
@end
@interface StoriesJSONModel : JSONModel
@property (nonatomic, strong) NSArray *images;
@property (nonatomic, strong) NSString *type;
@property (nonatomic, strong) NSString *id;
@property (nonatomic, strong) NSString *ga_prefix;
@property (nonatomic, strong) NSString *title;
@end
@interface TotalJSONModel : JSONModel
@property (nonatomic, copy) NSString *date;
@property (nonatomic, copy) NSArray<Top_storiesJSONModel *>*top_stories;
@property (nonatomic, copy) NSArray<StoriesJSONModel *>*stories;
@end
NS_ASSUME_NONNULL_END
//
// Top_storiesJSONModel.m
// JSONModel-exerciseDemo
//
// Created by mac on 2018/10/19.
// Copyright © 2018 姜凯文. All rights reserved.
//
#import "Top_storiesJSONModel.h"
@implementation StoriesJSONModel
@end
@implementation Top_storiesJSONModel
@end
@implementation TotalJSONModel
@end
- 这是我的JSONmodel类,可以看看到像这样写就可以完成嵌套,而JSONModel本身会帮我们完成映射
- 在接下来是使用,我是选择使用数组存储Model,方便直接调用, 这一段一个没什么难度了