将 json 解析为 flutter List<dynamic> 到 Map<String, dynamic>
parsing json into flutter List<dynamic> to Map<String, dynamic>
你好我想解析 Json 我遇到了这个问题请问有什么问题请帮忙
错误是 'List' 不是类型 'Map<String, dynamic>'
的子类型
型号
class CategoriesModel {
CategoriesModel({
this.id,
this.title,
this.price,
this.description,
this.image,
});
int? id;
String? title;
double? price;
String? description;
String? image;
factory CategoriesModel.fromJson(Map<String, dynamic> json) {
return CategoriesModel(
id: json["id"],
title: json["title"],
price: json["price"].toDouble(),
description: json["description"],
image: json["image"],
);
}
Map<String, dynamic> toMap() => {
"id": id,
"title": title,
"price": price,
"description": description,
"image": image,
};
}
在 肘 我做了这个 (AppCubit.dart)
CategoriesModel? categoriesModel ;
getCategories(){
emit(OnLoadingCategoriesState());
DioHelper.getData(pathUrl: "products").then((value){
categoriesModel = CategoriesModel.fromJson(value.data);
// catList = (value.data as List)
// .map((x) => CategoriesModel.fromJson(x))
// .toList();
// print(catList.length);
emit(OnSuccessCategoriesState());
}).catchError((error){
emit(OnCatchErrorCategoriesState(error.toString()));
print(error.toString());
});
}
在Dio Helper 我做了一般功能来使用它
static Future<Response> getData({required pathUrl})async{
return await dio.get(pathUrl);
}
这是来自 json
的小数据
[
{
"id": 1,
"title": "Fjallraven - Foldsack No. 1 Backpack, Fits 15 Laptops",
"price": 109.95,
"description": "Your perfect pack for everyday use and walks in the forest. Stash your laptop (up to 15 inches) in the padded sleeve, your everyday",
"category": "men's clothing",
"image": "https://fakestoreapi.com/img/81fPKd-2AYL._AC_SL1500_.jpg"
},
{
"id": 2,
"title": "Mens Casual Premium Slim Fit T-Shirts ",
"price": 22.3,
"description": "Slim-fitting style, contrast raglan long sleeve, three-button henley placket, light weight & soft fabric for breathable and comfortable wearing. And Solid stitched shirts with round neck made for durability and a great fit for casual fashion wear and diehard baseball fans. The Henley style round neckline includes a three-button placket.",
"category": "men's clothing",
"image": "https://fakestoreapi.com/img/71-3HjGNDUL._AC_SY879._SX._UX._SY._UY_.jpg"
},
]
我终于看到了这个错误
I/flutter (31455): onChange -- AppCubit, Change { currentState: Instance of 'OnLoadingCategoriesState', nextState: Instance of 'OnCatchErrorCategoriesState' }
I/flutter (31455): type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'
如有任何帮助,我将不胜感激
CategoriesModel.fromJson
期望类型 Map<String, dynamic>
但 json 片段显示响应是 List
.
更新 .then
函数来处理列表并从 List
中的每个项目创建 CategoriesModel
,类似于上面代码段中注释掉的代码。
DioHelper.getData(pathUrl: "products").then((List values) {
values.map((e) => CategoriesModel.fromJson(e)).toList();
}
你好我想解析 Json 我遇到了这个问题请问有什么问题请帮忙
错误是 'List' 不是类型 'Map<String, dynamic>'
的子类型
型号
class CategoriesModel {
CategoriesModel({
this.id,
this.title,
this.price,
this.description,
this.image,
});
int? id;
String? title;
double? price;
String? description;
String? image;
factory CategoriesModel.fromJson(Map<String, dynamic> json) {
return CategoriesModel(
id: json["id"],
title: json["title"],
price: json["price"].toDouble(),
description: json["description"],
image: json["image"],
);
}
Map<String, dynamic> toMap() => {
"id": id,
"title": title,
"price": price,
"description": description,
"image": image,
};
}
在 肘 我做了这个 (AppCubit.dart)
CategoriesModel? categoriesModel ;
getCategories(){
emit(OnLoadingCategoriesState());
DioHelper.getData(pathUrl: "products").then((value){
categoriesModel = CategoriesModel.fromJson(value.data);
// catList = (value.data as List)
// .map((x) => CategoriesModel.fromJson(x))
// .toList();
// print(catList.length);
emit(OnSuccessCategoriesState());
}).catchError((error){
emit(OnCatchErrorCategoriesState(error.toString()));
print(error.toString());
});
}
在Dio Helper 我做了一般功能来使用它
static Future<Response> getData({required pathUrl})async{
return await dio.get(pathUrl);
}
这是来自 json
的小数据[
{
"id": 1,
"title": "Fjallraven - Foldsack No. 1 Backpack, Fits 15 Laptops",
"price": 109.95,
"description": "Your perfect pack for everyday use and walks in the forest. Stash your laptop (up to 15 inches) in the padded sleeve, your everyday",
"category": "men's clothing",
"image": "https://fakestoreapi.com/img/81fPKd-2AYL._AC_SL1500_.jpg"
},
{
"id": 2,
"title": "Mens Casual Premium Slim Fit T-Shirts ",
"price": 22.3,
"description": "Slim-fitting style, contrast raglan long sleeve, three-button henley placket, light weight & soft fabric for breathable and comfortable wearing. And Solid stitched shirts with round neck made for durability and a great fit for casual fashion wear and diehard baseball fans. The Henley style round neckline includes a three-button placket.",
"category": "men's clothing",
"image": "https://fakestoreapi.com/img/71-3HjGNDUL._AC_SY879._SX._UX._SY._UY_.jpg"
},
]
我终于看到了这个错误
I/flutter (31455): onChange -- AppCubit, Change { currentState: Instance of 'OnLoadingCategoriesState', nextState: Instance of 'OnCatchErrorCategoriesState' }
I/flutter (31455): type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'
如有任何帮助,我将不胜感激
CategoriesModel.fromJson
期望类型 Map<String, dynamic>
但 json 片段显示响应是 List
.
更新 .then
函数来处理列表并从 List
中的每个项目创建 CategoriesModel
,类似于上面代码段中注释掉的代码。
DioHelper.getData(pathUrl: "products").then((List values) {
values.map((e) => CategoriesModel.fromJson(e)).toList();
}