老师我有个返回数据序列化的问题请教一下
来源:1-2 课程导学

mid_one
2022-08-08
比如我有个接口没登录返回
{"status": fail, "code": -1, "msg": ""}
登录成功后返回的数据
{
code: 1,
msg: 获取成功,
data: [
{id: 18, image_path: http://oss.xxx.cn/16597800501137.jpg, sort: 1, create_time: 2022-07-28 13:15:51, update_time: 2022-08-06 18:00:52, type: 1, url: http://xx.xx.cn}
]
}
请求
class SliderDao {
static get() async {
SliderRequest request = SliderRequest();
// request.pathParams = '';
var token = HiCache.getInstance().get('token');
print(token);
if (token != null) {
request.add('token', token);
var result = await HiNet.getInstance().fire(request);
print(result);
return result;
} else {
HiNavigator.getInstance().onJumpTo(RouteStatus.login);
}
// return result;
// if (result['code'] == -1) {
// return result;
// } else if (result['code'] == 1) {
// return result;
// }
// var convertJson = json.decode(result.toString());
// return HomeSliderMo.fromJson(result);
// return convertJson;
}
}
page
void loadData() async {
try {
var result = await SliderDao.get();
// var result = jsonDecode(res);
if (result['code'] == 1) {
setState(() {
sliderList = result['data'];
});
} else {
showWarnToast(result['msg']);
HiNavigator.getInstance().onJumpTo(RouteStatus.login);
}
} on NeedAuth catch (e) {
print(e);
showWarnToast(e.msg);
} on HiNetError catch (e) {
print(e);
showWarnToast(e.msg);
}
}
没登录的情况下走到了page的loadData里, 要通过jsonDecode(result)
才能获取到code和msg
但是登录成功以后也进入page的loadData里,这时候通过jsonDecode(result)
就报错了, 导致我获取不到sliderDao返回的数据
_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String'
slideModel
class HomeSliderMo {
int? code;
String? msg;
List<Data>? data;
HomeSliderMo({this.code, this.msg, this.data});
HomeSliderMo.fromJson(Map<String, dynamic> json) {
code = json['code'];
msg = json['msg'];
if (json['data'] != null) {
data = <Data>[];
json['data'].forEach((v) {
data!.add(new Data.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['code'] = this.code;
data['msg'] = this.msg;
if (this.data != null) {
data['data'] = this.data!.map((v) => v.toJson()).toList();
}
return data;
}
}
class Data {
int? id;
String? imagePath;
int? sort;
String? createTime;
String? updateTime;
int? type;
String? url;
Data(
{this.id,
this.imagePath,
this.sort,
this.createTime,
this.updateTime,
this.type,
this.url});
Data.fromJson(Map<String, dynamic> json) {
id = json['id'];
imagePath = json['image_path'];
sort = json['sort'];
createTime = json['create_time'];
updateTime = json['update_time'];
type = json['type'];
url = json['url'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['image_path'] = this.imagePath;
data['sort'] = this.sort;
data['create_time'] = this.createTime;
data['update_time'] = this.updateTime;
data['type'] = this.type;
data['url'] = this.url;
return data;
}
}
这个我该怎么处理呢
写回答
1回答
-
CrazyCodeBoy
2022-08-09
问题在于这种情况下数据已经从JSON解码成Map<String,dynamic>不需要在使用json.decode()再次对其进行解码了,
可以加下判断if (res is String) 在进行json.decode()操作。00
相似问题