arrays - Flutter:如何 JSON 解析列表内的对象内的对象
问题描述
我必须将以下 json 解析为颤振中的数据模型
[
{
"cmb_marital_status": {
"1": "Unmarried",
"2": " Married",
"3": " Widow",
"4": " Divorced",
"5": " Separated",
"6": " Living together"
},
"cmb_gender": {
"M": "Male",
"F": "Female"
},
"cmb_yes/no": {
"1": "No",
"2": " Yes"
}
}]
我已经创建了这个数据模型来解析 API 请求。
class AllData {
CmbMaritalStatus cmbMaritalStatus;
CmbGender cmbGender;
CmbYesNo cmbYesNo;
AllData(
{this.cmbMaritalStatus,
this.cmbGender,
this.cmbYesNo});
AllData.fromJson(Map<String, dynamic> json) {
cmbMaritalStatus = json['cmb_marital_status'] != null
? new CmbMaritalStatus.fromJson(json['cmb_marital_status'])
: null;
cmbGender = json['cmb_gender'] != null
? new CmbGender.fromJson(json['cmb_gender'])
: null;
cmbYesNo = json['cmb_yes/no'] != null
? new CmbYesNo.fromJson(json['cmb_yes/no'])
: null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.cmbMaritalStatus != null) {
data['cmb_marital_status'] = this.cmbMaritalStatus.toJson();
}
if (this.cmbGender != null) {
data['cmb_gender'] = this.cmbGender.toJson();
}
if (this.cmbYesNo != null) {
data['cmb_yes/no'] = this.cmbYesNo.toJson();
}
return data;
}
}
class CmbMaritalStatus {
String s1;
String s2;
String s3;
String s4;
String s5;
String s6;
CmbMaritalStatus({this.s1, this.s2, this.s3, this.s4, this.s5, this.s6});
CmbMaritalStatus.fromJson(Map<String, dynamic> json) {
s1 = json['1'];
s2 = json['2'];
s3 = json['3'];
s4 = json['4'];
s5 = json['5'];
s6 = json['6'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['1'] = this.s1;
data['2'] = this.s2;
data['3'] = this.s3;
data['4'] = this.s4;
data['5'] = this.s5;
data['6'] = this.s6;
return data;
}
}
class CmbGender {
String m;
String f;
CmbGender({this.m, this.f});
CmbGender.fromJson(Map<String, dynamic> json) {
m = json['M'];
f = json['F'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['M'] = this.m;
data['F'] = this.f;
return data;
}
}
class CmbYesNo {
String s1;
String s2;
CmbYesNo({this.s1, this.s2});
CmbYesNo.fromJson(Map<String, dynamic> json) {
s1 = json['1'];
s2 = json['2'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['1'] = this.s1;
data['2'] = this.s2;
return data;
}
}
}
我正在使用此 API 请求代码将数据解析为数据模型。
Future <List<AllData>> getAllData(context) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
final authToken = prefs.getString('accessToken');
List<AllData> data;
try{
final response = await http.get(GET_ALL_DATA,
headers: {
HttpHeaders.contentTypeHeader:"application/json",
HttpHeaders.authorizationHeader: authToken
},
);
var responseBody = json.decode(response.body);
print("all data response: $responseBody");
if(response.statusCode == 200){
var list = json.decode(responseBody[0]) as List;
data = list.map((i)=> AllData.fromJson(i)).toList();
return data;
}else if(response.statusCode == 400 || response.statusCode == 404 || response.statusCode == 401){
Toast.show("Server error",context,backgroundColor: Colors.red,textColor: Colors.white);
}else if (response.statusCode == 500){
Toast.show("Server error",context,backgroundColor: Colors.red,textColor: Colors.white);
}else{
Toast.show("Server error",context,backgroundColor: Colors.red,textColor: Colors.white);
}
}catch (e){
Toast.show("Server error",context,backgroundColor: Colors.red,textColor: Colors.white);
}
return data;
}
但它返回此错误“类型'_InternalLinkedHashMap<String,动态>'不是'String'类型的子类型”
我怎样才能成功解析这个json?
解决方案
尝试直接从中获取列表responseBody
:
final responseBody = json.decode(response.body);
print("all data response: $responseBody");
if(response.statusCode == 200) {
data = responseBody.map((i)=> AllData.fromJson(i)).toList();
return data;
}
推荐阅读
- android - android-如何使用 ViewPager 使所有屏幕可滚动?
- django - 将 Sql 查询(多对多)转换为 Django ORM 查询
- node.js - node.js 版本升级后如何重建节点模块?
- c++ - 我想定义一个类来接收来自用户的一些信息,然后在 C++ 控制台中打印它们
- r - 尝试创建一个新列,观察响应 2 个单独列中的标准并确定输出
- r - 使用循环从 R 中数据框中的另一列创建多列
- php - 如何在 php 中解码 utf-8
- r - 在 r-highcharter 中更改图表元素的颜色
- c# - EF Add-Migration:使用 app.config 的连接字符串问题
- python - 如何将类的实例分配为类主体中同一类的属性?