今天遇到这么个情况,后台返回的结果中,包含了 json 字符串 extras,如何在解析的时候一句话搞定呢?
下面是后台返回的结果:(不用多介绍,一眼就能看出来它的结构)
{
"branchCode": "89jklsdjf89890",
"code" : "123",
"alert": "时间带看练腹肌啊拉克丝",
"extras" : "{"isSystem":"0","name":"巴啦啦小魔仙","pushTime":"2020-10-22 14:21:17","type":"1006","params":"code=73be78cc182143e58eb4f3a40c96d638","key":"1004"}",
"havaRead" : "1",
"type" : 2
}
先说下 GitHub 上 MJ 提供的两种常见情况的解析,都是可以直接使用 mj_objectWithKeyValues 进行解析:
The most simple JSON -> Model【最简单的字典转模型】
typedef enum {
SexMale,
SexFemale
} Sex;
@interface User : NSObject
@property (copy, nonatomic) NSString *name;
@property (copy, nonatomic) NSString *icon;
@property (assign, nonatomic) unsigned int age;
@property (copy, nonatomic) NSString *height;
@property (strong, nonatomic) NSNumber *money;
@property (assign, nonatomic) Sex sex;
@property (assign, nonatomic, getter=isGay) BOOL gay;
@end
/***********************************************/
NSDictionary *dict = @{
@"name" : @"Jack",
@"icon" : @"lufy.png",
@"age" : @20,
@"height" : @"1.55",
@"money" : @100.9,
@"sex" : @(SexFemale),
@"gay" : @"true"
// @"gay" : @"1"
// @"gay" : @"NO"
};
// JSON -> User
User *user = [User mj_objectWithKeyValues:dict];
NSLog(@"name=%@, icon=%@, age=%zd, height=%@, money=%@, sex=%d, gay=%d", user.name, user.icon, user.age, user.height, user.money, user.sex, user.gay);
// name=Jack, icon=lufy.png, age=20, height=1.550000, money=100.9, sex=1
JSONString -> Model【JSON字符串转模型】
// 1.Define a JSONString
NSString *jsonString = @"{\"name\":\"Jack\", \"icon\":\"lufy.png\", \"age\":20}";
// 2.JSONString -> User
User *user = [User mj_objectWithKeyValues:jsonString];
// 3.Print user's properties
NSLog(@"name=%@, icon=%@, age=%d", user.name, user.icon, user.age);
// name=Jack, icon=lufy.png, age=20
重
点
来
了
JSON contains JSONString -> Model【JSON 包含 JSONString 转模型】
还是用开头的那个例子
{
"branchCode": "89jklsdjf89890",
"code" : "123",
"alert": "时间带看练腹肌啊拉克丝",
"extras" : "{"isSystem":"0","name":"巴啦啦小魔仙","pushTime":"2020-10-22 14:21:17","type":"1006","params":"code=73be78cc182143e58eb4f3a40c96d638","key":"1004"}",
"havaRead" : "1",
"type" : 2
}
- 首先是建立两个 model:NoticeModel 和 NoticeExtrasModel
- 然后在 NoticeModel.m 中实现这个方法
- 然后解析的时候,就可以直接使用 mj_objectWithKeyValues 了
NoticeModel *noticeModel = [NoticeModel mj_objectWithKeyValues:record];