大佬教程收集整理的这篇文章主要介绍了未从 json 列表中获取所需的值 - 颤动,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个代码,可以从 online json data 获取值并打印其值@H_301_1@
@H_108_4@main.dart@H_301_1@
final String url = 'https://raw.githubusercontent.com/BrightCode1/ohms-Json/master/categorIEs.Json';
List<JsonModel> mymodel = [];
List<CatSubcategory> subCate = [];
int localint;
@overrIDe
voID initState() {
// Todo: implement initState
super.initState();
localint = 0;
loadData(localint);
}
loadData(int dataint) async {
var res = await http.get(url,headers: {"Accept": "application/Json"});
if (res.statusCode == 200) {
String resBody = res.body;
var JsonDecode = Json.decode(resBody);
for (var data in JsonDecodE) {
data['cat_subcategory'].map((X) {
return subCate.add(
CatSubcategory(subname: x['sub_name'],subImage: x['sub_image']));
}).toList();
mymodel.add(JsonModel(
category: data['category'],catID: data['cat_ID'],catIcon: data['cat_icon'],catSubcategory: subCatE));
setState(() {});
}
print(mymodel[dataInt].catSubcategory.length);
} else {
print("Something went wrong!");
}
}
我的模型.dart@H_301_1@
class JsonModel {
JsonModel({
this.category,this.catID,this.catIcon,this.catSubcategory,});
String category;
String catID;
String catIcon;
List<CatSubcategory> catSubcategory;
factory JsonModel.fromJson(Map<String,dynamic> Json) => JsonModel(
category: Json["category"],catID: Json["cat_ID"],catIcon: Json["cat_icon"],catSubcategory: List<CatSubcategory>.from(
Json["cat_subcategory"].map((X) => CatSubcategory.fromJson(X))),);
Map<String,dynamic> toJson() => {
"category": category,"cat_ID": catID,"cat_icon": catIcon,"cat_subcategory":
List<dynamic>.from(catSubcategory.map((X) => x.toJson())),};
}
class CatSubcategory {
CatSubcategory({
this.subname,this.subImage,});
String subname;
String subImage;
factory CatSubcategory.fromJson(Map<String,dynamic> Json) => CatSubcategory(
subname: Json["sub_name"],subImage: Json["sub_image"],dynamic> toJson() => {
"sub_name": subname,"sub_image": subImage,};
}
现在唯一的问题是,当我尝试在第一个列表的子类别上打印长度时,它给了我 24
而不是 6
,我像这样打印 {{1} }. @H_84_7@mymodel[dataInt].catSubcategory.length 是 0,这意味着它应该打印出类别为 dataInt
的子项("cat_subcategory"
)的长度,但它正在打印其他 lis 的所有其他子项。所以请问我该怎么做。如果您需要更多解释,请告诉我@H_301_1@
如果您已经知道 json 的架构,我会避免从头开始编写自己的模型。
只需使用诸如 https://app.quicktype.io/ 之类的东西,只需粘贴您的 json 即可获得
import 'dart:convert';
class Root {
Root({
this.category,this.catId,this.catIcon,this.catSubcategory,});
String category;
String catId;
String catIcon;
List<CatSubcategory> catSubcategory;
factory Root.fromJson(Map<String,dynamic> json) => Root(
category: json["category"],catId: json["cat_id"],catIcon: json["cat_icon"] == null ? null : json["cat_icon"],catSubcategory: List<CatSubcategory>.from(json["cat_subcategory"].map((X) => CatSubcategory.fromJson(X))),);
Map<String,dynamic> toJson() => {
"category": category,"cat_id": catId,"cat_icon": catIcon == null ? null : catIcon,"cat_subcategory": List<dynamic>.from(catSubcategory.map((X) => x.toJson())),};
}
class CatSubcategory {
CatSubcategory({
this.subName,this.subImage,});
String subName;
String subImage;
factory CatSubcategory.fromJson(Map<String,dynamic> json) => CatSubcategory(
subName: json["sub_name"],subImage: json["sub_image"],dynamic> toJson() => {
"sub_name": subName,"sub_image": subImage,};
}
然后你应该很好
loadData(int dataint) async {
var res = await http.get(url,headers: {"Accept": "application/json"});
if (res.statusCode == 200) {
String resBody = res.body;
var list = json.decode(resBody) as List;
List<Root> items = list.map((i)=>Root.fromJson(i)).toList();
print(items[0].catSubcategory.length);
}
} else {
print("Something went wrong!");
}
}
以上是大佬教程为你收集整理的未从 json 列表中获取所需的值 - 颤动全部内容,希望文章能够帮你解决未从 json 列表中获取所需的值 - 颤动所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。