【问题标题】:convert json to dart将json转换为飞镖
【发布时间】:2021-04-12 08:22:08
【问题描述】:

我是 Flutter 的初学者,我只想知道如何在控制台中打印 productA 和 220。下面是json文件,下面也是创建dart文件。

{
  "status": true,
  "message": "Data returned successfull",
  "data": {
    "products": [
      {
        "productName": "productA",
        "productPrice": "220.00",
      }
    ]
  }
}

产品.dart

class Product {
  bool status;
  String message;
  Data data;

  Product({this.status, this.message, this.data});

  Product.fromJson(Map<String, dynamic> json) {
    status = json['status'];
    message = json['message'];
    data = json['data'] != null ? new Data.fromJson(json['data']) : null;
  }
}

class Data {
  List<Products> products;

  Data({this.products});

  Data.fromJson(Map<String, dynamic> json) {
    if (json['products'] != null) {
      products = new List<Products>();
      json['products'].forEach((v) {
        products.add(new Products.fromJson(v));
      });
    }
  }
}

class Products {
  String prodName;
  String prodRkPrice;

  Products({this.prodName, this.prodRkPrice});

  Products.fromJson(Map<String, dynamic> json) {
    prodName = json['prodName'];
    prodRkPrice = json['prodRkPrice'];
  }
}




但仍然不知道如何打印这些值。


fetchData() async {
    try {
      String extractedData =
          await http.get('json url').toString();

      final parsed = jsonDecode(extractedData).cast(Map<String, dynamic>());

      final products = Product.fromJson(parsed);

      print(products);

      //print(json.decode(response.body));
      //print(response[0]);
    } catch (error) {
      throw (error);
    }
  }


我曾尝试使用此方法,但出现错误,不知道如何解析和打印这些值? 请帮助我,我是 Flutter 的初学者

【问题讨论】:

    标签: json flutter dart


    【解决方案1】:

    将您的 fetchData 更改为:

    Future<void> fetchData() async {
      try {
        Response response = await http.get('json url'); //getting the response without .toString
        Map<String, dynamic> extractedData = jsonDecode(response.body); //converting the response
    
        Product products = Product.fromJson(extractedData);
    
        products.data.products.forEach((product) {
          print(product.prodName);
          print(product.prodRkPrice);
        });
    
      } catch (error) {
        throw (error);
      }
    }
    

    只要记住在Products类中匹配api的相同属性名即可:

    Products.fromJson(Map<String, dynamic> json) {
        prodName = json['productName'];
        prodRkPrice = json['productPrice'];
    }
    

    【讨论】:

      【解决方案2】:

      这应该可行:

      Map<String, dynamic> message = jsonDecode('{"status": true,"message": "Data returned successfull","data": {"products": [{"productName": "productA","productPrice": "220.00"}]}}');
      print(message["data"]["products"][0]["productName"]);
      

      你遇到了什么错误?

      【讨论】:

        【解决方案3】:

        请试试这个function

        fetchData() async {
            try {
              var extractedData = await http.get('json url');
              Product finalResponse = Product.fromJson(jsonDecode(extractedData.body)); 
              print(finalResponse.products[0].productName);                   
              print(finalResponse);    
            } catch (error) {
              throw (error);
            }
          }
        

        【讨论】:

          【解决方案4】:

          String urlBase = "https://.....";

          未来的 fetchData 异步 {

          var jsonResponse;
          var response = await http.get("$urlBase");
          
          if (response != null && response.statusCode == 200) {
            jsonResponse = json.decode(response.body);
          
           Object obj= jsonDecode(response.body);
          
            return obj;
          } else {
            //do something else
          }
          

          }

          【讨论】:

            【解决方案5】:

            要访问 Product A 和 220,首先您应该将 json 响应转换为 dart 对象。我Try free online JSON to Dart convertor 这是飞镖对象类

            class product_model {
              bool status;
              String message;
              Data data;
            
              product_model({this.status, this.message, this.data});
            
              product_model.fromJson(Map<String, dynamic> json) {
                status = json['status'];
                message = json['message'];
                data = json['data'] != null ? new Data.fromJson(json['data']) : null;
              }
            
              Map<String, dynamic> toJson() {
                final Map<String, dynamic> data = new Map<String, dynamic>();
                data['status'] = this.status;
                data['message'] = this.message;
                if (this.data != null) {
                  data['data'] = this.data.toJson();
                }
                return data;
              }
            }
            
            class Data {
              List<Products> products;
            
              Data({this.products});
            
              Data.fromJson(Map<String, dynamic> json) {
                if (json['products'] != null) {
                  products = new List<Products>();
                  json['products'].forEach((v) {
                    products.add(new Products.fromJson(v));
                  });
                }
              }
            
              Map<String, dynamic> toJson() {
                final Map<String, dynamic> data = new Map<String, dynamic>();
                if (this.products != null) {
                  data['products'] = this.products.map((v) => v.toJson()).toList();
                }
                return data;
              }
            }
            
            class Products {
              String productName;
              String productPrice;
            
              Products({this.productName, this.productPrice});
            
              Products.fromJson(Map<String, dynamic> json) {
                productName = json['productName'];
                productPrice = json['productPrice'];
              }
            
              Map<String, dynamic> toJson() {
                final Map<String, dynamic> data = new Map<String, dynamic>();
                data['productName'] = this.productName;
                data['productPrice'] = this.productPrice;
                return data;
              }
            }
            

            要访问产品 A 和值 220,请使用以下代码。

             final Map<String, dynamic> parsed = await wrapper.get_CategoryFull(catid);
            final model = product_model.fromJson(parsed);
                 if (model.data.length > 0) {    
                   if (model.products.length > 0) {
                          for (int i = 0; i < model.products.length; i++) {
                            print(" product name " +model.products[i].productName);
                            print(" product price " +model.products[i].productPrice);
                           
                          }
                    
                        } 
                }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-01-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-01-16
              • 2020-04-18
              相关资源
              最近更新 更多