未从json列表中获取所需值-颤振

未从json列表中获取所需值-颤振,json,flutter,dart,Json,Flutter,Dart,我有这个代码,我可以从一个 main.dart final String url = 'https://raw.githubusercontent.com/BrightCode1/ohms-json/master/categories.json'; List<JsonModel> myModel = []; List<CatSubcategory> subCate = []; int localInt; @override void initState()

我有这个代码,我可以从一个

main.dart

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!");
    }

  }
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"],
  );

  Map<String, dynamic> toJson() => {
    "sub_name": subName,
    "sub_image": subImage,
  };
}
final String url='1〕https://raw.githubusercontent.com/BrightCode1/ohms-json/master/categories.json';
列出myModel=[];
列表子类别=[];
内部本地化;
@凌驾
void initState(){
//TODO:实现initState
super.initState();
localent=0;
loadData(localent);
}
加载数据(int-dataInt)异步{
var res=await http.get(url,头:{“Accept”:“application/json”});
如果(res.statusCode==200){
字符串resBody=res.body;
var jsonDecode=json.decode(resBody);
for(jsonDecode中的var数据){
数据['cat_子类别]].map((x){
返回subCate.add(
CatSubcategory(子名称:x['sub_name'],子图像:x['sub_image']);
}).toList();
添加(JsonModel(
类别:数据['category'],
catId:data['cat_id'],
catIcon:数据['cat_图标],
catSubcategory:subCate));
setState((){});
}
打印(myModel[dataInt].catSubcategory.length);
}否则{
打印(“出问题了!”);
}
}
我的模型。飞镖

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!");
    }

  }
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"],
  );

  Map<String, dynamic> toJson() => {
    "sub_name": subName,
    "sub_image": subImage,
  };
}
classjsonmodel{
JsonModel({
这一类,,
这个.catId,
这是卡蒂肯,
此.cats子类别,
});
字符串类别;
字符串catId;
线状catIcon;
列出子类别;
工厂JsonModel.fromJson(映射json)=>JsonModel(
类别:json[“类别”],
catId:json[“cat_id”],
catIcon:json[“cat_图标”],
catSubcategory:List.from(
json[“cat_subcategory”].map((x)=>CatSubcategory.fromJson(x)),
);
映射到JSON()=>{
“类别”:类别,
“cat_id”:catId,
“cat_图标”:catIcon,
“cat_子类别”:
List.from(catSubcategory.map((x)=>x.toJson()),
};
}
类CatSubcategory{
CatSubcategory({
这个.subName,
这个子图像,
});
字符串子名称;
字符串子图像;
factory CatSubcategory.fromJson(映射json)=>CatSubcategory(
子名称:json[“子名称”],
子映像:json[“子映像”],
);
映射到JSON()=>{
“子名称”:子名称,
“子图像”:子图像,
};
}

我现在唯一的问题是,当我试图在第一个列表的子类别上打印长度时,它给我的是
24
,而不是
6
,我这样打印
myModel[dataInt].catSubcategory.length
dataInt
为0,这意味着它应该打印出子项的长度(
“cat_子类别”
),其类别为
设计与创意
,但它正在打印其他lis的所有其他子项。那么,我该怎么做呢。如果您需要更多解释,请告诉我

如果您已经知道json的模式,我将避免从头开始编写您自己的模型

只要使用类似粘贴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"],
    );

    Map<String, dynamic> toJson() => {
        "sub_name": subName,
        "sub_image": subImage,
    };
}
导入'dart:convert';
类根{
根({
这一类,,
这个.catId,
这是卡蒂肯,
此.cats子类别,
});
字符串类别;
字符串catId;
线状catIcon;
列出子类别;
工厂根.fromJson(映射json)=>根(
类别:json[“类别”],
catId:json[“cat_id”],
catIcon:json[“cat_图标”]==null?null:json[“cat_图标”],
catSubcategory:List.from(json[“cat_subcategory”].map((x)=>catSubcategory.fromJson(x)),
);
映射到JSON()=>{
“类别”:类别,
“cat_id”:catId,
“cat_图标”:catIcon==null?null:catIcon,
“catu子类别”:List.from(catSubcategory.map((x)=>x.toJson()),
};
}
类CatSubcategory{
CatSubcategory({
这个.subName,
这个子图像,
});
字符串子名称;
字符串子图像;
factory CatSubcategory.fromJson(映射json)=>CatSubcategory(
子名称:json[“子名称”],
子映像:json[“子映像”],
);
映射到JSON()=>{
“子名称”:子名称,
“子图像”:子图像,
};
}
然后你就应该好好的

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!");
    }

  }
loadData(int-dataInt)异步{
var res=await http.get(url,头:{“Accept”:“application/json”});
如果(res.statusCode==200){
字符串resBody=res.body;
var list=json.decode(resBody)作为列表;
List items=List.map((i)=>Root.fromJson(i)).toList();
打印(项目[0].catSubcategory.length);
}
}否则{
打印(“出问题了!”);
}
}