Flutter解析复杂Json

时间:2020-07-08 15:05:32

标签: json flutter parsing

我在从toMap()解码json时遇到问题。我对fromJson()函数没有任何问题。 我的主要目标是将其保存在共享的首选项上。一切正常,除了我的图片为空值

这是我的toMap()方法: 除图像外,所有变量均有效;

        Map<String, dynamic> toMap() {

        var map = new Map<String, dynamic>();
        ImagesModel img = ImagesModel();
        Map<String, dynamic> imagesList = img.toMap();
        map["id"] = id;
        map["name"] = name;
        map["description"] = description;
        map["catalog_visibility"] = catalog_visibility;
        map["short_description"] = short_description;
        map["regular_price"] = regular_price;
        map["sale_price"] = sale_price;
        map["date_created"] = date_created;
        map['images'] = imagesList; --> I got null value on this images
        return map;
      }

这是我的图像模型

   class ImagesModel{
      final int id;
      final String src;
      final String name;

      ImagesModel({this.id, this.src, this.name});
      factory ImagesModel.fromJSON(Map<String, dynamic> parsedJson){
        return ImagesModel(
          id: parsedJson['id'],
          src: parsedJson['src'],
          name: parsedJson['name']
        );
      }
      Map<String, dynamic> toMap() => {
        "id": id,
        "src": src,
        "name" :name,
      };
    }

我的整个产品模型

      class ProductsModel {
      final int id;
      final String name;
      final String catalog_visibility;
      final String description;
      final String short_description;
      final String price;
      final String regular_price;
      final String sale_price;
      final String date_created;

      final List<CategoriesModel> categories;
      final List<ImagesModel> images;
      ProductsModel(
          {this.id,
          this.name,
          this.catalog_visibility,
          this.description,
          this.short_description,
          this.price,
          this.regular_price,
          this.sale_price,
          this.date_created,
          this.categories,
          this.images
          });

      factory ProductsModel.fromJSON(Map<String, dynamic> parsedJson) {
        var categoriesList = parsedJson['categories'] as List;
        var imagesList = parsedJson['images'] as List;
        List<ImagesModel> dataImages = imagesList.map((i) => ImagesModel.fromJSON(i)).toList();
        List<CategoriesModel> dataCategories =
        categoriesList.map((i) => CategoriesModel.fromJSON(i)).toList();
        return ProductsModel(
          id: parsedJson['id'],
          name: parsedJson['name'],
            catalog_visibility: parsedJson['catalog_visibility'],
            description: parsedJson['description'],
            short_description: parsedJson['short_description'],
            regular_price: parsedJson['regular_price'],
            sale_price: parsedJson['sale_price'],
            date_created: parsedJson['date_created'],
            categories: dataCategories,
          images: dataImages
        );

      }

      Map<String, dynamic> toMap() {

        var map = new Map<String, dynamic>();
        ImagesModel img = ImagesModel();
        Map<String, dynamic> imagesList = img.toMap();
        map["id"] = id;
        map["name"] = name;
        map["description"] = description;
        map["catalog_visibility"] = catalog_visibility;
        map["short_description"] = short_description;
        map["regular_price"] = regular_price;
        map["sale_price"] = sale_price;
        map["date_created"] = date_created;
        map['images'] = imagesList;
        return map;
      }
    }

2 个答案:

答案 0 :(得分:1)

只需检查 imagesList 是否为空。喜欢

      Map<String, dynamic> toMap() {

        var map = new Map<String, dynamic>();
        ImagesModel img = ImagesModel();
        Map<String, dynamic> imagesList = img.toMap();
        map["id"] = id;
        map["name"] = name;
        map["description"] = description;
        map["catalog_visibility"] = catalog_visibility;
        map["short_description"] = short_description;
        map["regular_price"] = regular_price;
        map["sale_price"] = sale_price;
        map["date_created"] = date_created;

 
         if (this.images != null) {
        data['images'] = this.images.map((v) => v.toJson()).toList();
    }
 
        return map;
      }

答案 1 :(得分:0)

构造函数没有参数。检查一下。

ImagesModel img = ImagesModel(id:1,src:'value',name:'value');

      Map<String, dynamic> toMap() {

        var map = new Map<String, dynamic>();
        ImagesModel img = ImagesModel(id:1,src:'value',name:'value');
        Map<String, dynamic> imagesList = img.toMap();
        map["id"] = id;
        map["name"] = name;
        map["description"] = description;
        map["catalog_visibility"] = catalog_visibility;
        map["short_description"] = short_description;
        map["regular_price"] = regular_price;
        map["sale_price"] = sale_price;
        map["date_created"] = date_created;
        map['images'] = imagesList; --> I got null value on this images
        return map;
      }