【问题标题】:Filtering JSON Data Based on a key of map基于map的key过滤JSON数据
【发布时间】:2020-12-18 11:13:31
【问题描述】:

我正在解析和显示来自 Json api 类型的“带有列表的嵌套结构”的数据。这是输出:showing data from list of map 这是代码:

import 'package:ecommerce/data/HomePageTestData.dart';
import 'package:ecommerce/model/product_model.dart';
import 'package:ecommerce/services/product_services.dart';
import 'package:ecommerce/widgets/Home/SingleProduct.dart';
import 'package:flutter/material.dart';

// ignore: must_be_immutable
class NewesProdutBuilder extends StatelessWidget {
HomePageTestData homePageTestData = HomePageTestData();
@override
Widget build(BuildContext context) {
return FutureBuilder<List<Product>>(
    future: getProduct(),
    builder: (context, snapshot) {
      if (snapshot.connectionState == ConnectionState.done) {
        if (snapshot.hasError) {
          return Text("Error");
        }
        return GridView.builder(
          itemCount: snapshot.data.length,
          gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
            crossAxisCount: 2,
          ),
          itemBuilder: (BuildContext contextd, int index) => SingleProduct(
            picture: snapshot.data[index].productImage,
            price: snapshot.data[index].salePrice,
            name: snapshot.data[index].productName,
            rating: snapshot.data[index].ratting,
          ),
        );
      } else
        return Center(
          child: CircularProgressIndicator(),
        );
    });
    }
   }

。现在这是我的 json 演示:

{
"message": "all product show",
"product": [
    {
        "id": 12,
        "product_name": "nurullah",
        "product_description": "nurullah123",
        "category_id": 7,
        "color_id": 3,
        "size_id": 2,
        "regular_price": 123,
        "sale_price": 123,
        "quantity": 12,
        "ratting": 5,
        "product_image": "image/product/370313701.jpg",
        "flag": 0,
        "status": 1,
        "created_at": "2020-08-11 13:43:55",
        "updated_at": "2020-08-11 13:43:55"
    },
    {
        "id": 15,
        "product_name": "last  change",
        "product_description": "last",
        "category_id": 6,
        "color_id": 2,
        "size_id": 2,
        "regular_price": 50,
        "sale_price": 50,
        "quantity": 2,
        "ratting": 5,
        "product_image": "image/product/73804247.jpg",
        "flag": 0,
        "status": 1,
        "created_at": "2020-08-19 08:39:55",
        "updated_at": "2020-08-22 13:24:24"
    },
    {
        "id": 20,
        "product_name": "laptop",
        "product_description": "laptop laptop",
        "category_id": 5,
        "color_id": 2,
        "size_id": 2,
        "regular_price": 100000,
        "sale_price": 99999,
        "quantity": 2,
        "ratting": 5,
        "product_image": "image/product/1344055520.jpg",
        "flag": 1,
        "status": 1,
        "created_at": "2020-08-19 18:05:53",
        "updated_at": "2020-08-19 18:05:53"
    },
    {
        "id": 22,
        "product_name": "final update",
        "product_description": "avbhhdh",
        "category_id": 5,
        "color_id": 2,
        "size_id": 2,
        "regular_price": 1234,
        "sale_price": 1231,
        "quantity": 123,
        "ratting": 5,
        "product_image": "image/product/306259603.jpg",
        "flag": 0,
        "status": 0,
        "created_at": "2020-08-20 12:50:52",
        "updated_at": "2020-08-20 12:50:52"
    },
    {
        "id": 23,
        "product_name": "Sarowar Test",
        "product_description": "sarowar test",
        "category_id": 5,
        "color_id": 2,
        "size_id": 2,
        "regular_price": 100,
        "sale_price": 100,
        "quantity": 100,
        "ratting": 5,
        "product_image": "image/product/44664910.jpg",
        "flag": 0,
        "status": 1,
        "created_at": "2020-08-22 05:10:57",
        "updated_at": "2020-08-22 05:10:57"
    },
    {
        "id": 29,
        "product_name": "updated today",
        "product_description": "clear clear",
        "category_id": 4,
        "color_id": 2,
        "size_id": 2,
        "regular_price": 400,
        "sale_price": 200,
        "quantity": 30,
        "ratting": 5,
        "product_image": "image/product/1050889360.jpg",
        "flag": 1,
        "status": 1,
        "created_at": "2020-08-22 08:04:39",
        "updated_at": "2020-08-23 03:49:07"
    },
    {
        "id": 31,
        "product_name": "test product create",
        "product_description": "test update",
        "category_id": 5,
        "color_id": 3,
        "size_id": 3,
        "regular_price": 123,
        "sale_price": 121,
        "quantity": 12,
        "ratting": 5,
        "product_image": "image/product/2038622981.jpg",
        "flag": 0,
        "status": 0,
        "created_at": "2020-08-25 11:14:36",
        "updated_at": "2020-08-25 11:14:36"
    },
    {
        "id": 32,
        "product_name": "first update",
        "product_description": "first",
        "category_id": 2,
        "color_id": 2,
        "size_id": 2,
        "regular_price": 50,
        "sale_price": 50,
        "quantity": 2,
        "ratting": 2,
        "product_image": "image/product/1715828823.png",
        "flag": 1,
        "status": 1,
        "created_at": "2020-08-27 09:25:10",
        "updated_at": "2020-08-27 09:25:10"
    },
    {
        "id": 33,
        "product_name": "check dialog",
        "product_description": "check",
        "category_id": 5,
        "color_id": 3,
        "size_id": 3,
        "regular_price": 123,
        "sale_price": 121,
        "quantity": 12,
        "ratting": 5,
        "product_image": "image/product/2087545994.jpg",
        "flag": 0,
        "status": 0,
        "created_at": "2020-08-27 09:37:23",
        "updated_at": "2020-08-27 09:37:23"
    },
    {
        "id": 34,
        "product_name": "ddd",
        "product_description": "ddd",
        "category_id": 5,
        "color_id": 3,
        "size_id": 3,
        "regular_price": 123,
        "sale_price": 12,
        "quantity": 12,
        "ratting": 5,
        "product_image": "image/product/2108974399.jpg",
        "flag": 1,
        "status": 0,
        "created_at": "2020-08-27 09:42:47",
        "updated_at": "2020-08-27 09:42:47"
    },
    {
        "id": 35,
        "product_name": "cccc",
        "product_description": "sssss",
        "category_id": 5,
        "color_id": 3,
        "size_id": 3,
        "regular_price": 123,
        "sale_price": 1211,
        "quantity": 21,
        "ratting": 5,
        "product_image": "image/product/551301279.jpg",
        "flag": 1,
        "status": 1,
        "created_at": "2020-08-27 12:07:53",
        "updated_at": "2020-08-27 12:07:53"
    }
]

}

在这个 json 中有一个名为 flag 的属性。现在我只想显示那些标志为 1 的数据。我不明白如何做到这一点。 请帮我找到解决方案。提前致谢。

解决方案:

import 'package:ecommerce/data/HomePageTestData.dart';
import 'package:ecommerce/model/product_model.dart';
import 'package:ecommerce/services/product_services.dart';
import 'package:ecommerce/widgets/Home/SingleProduct.dart';
import 'package:flutter/material.dart';

 // ignore: must_be_immutable
 class NewesProdutBuilder extends StatelessWidget {
   HomePageTestData homePageTestData = HomePageTestData();
   @override
   Widget build(BuildContext context) {
     return FutureBuilder<List<Product>>(
    future: getProduct(),
    builder: (context, snapshot) {
      if (snapshot.connectionState == ConnectionState.done) {
        if (snapshot.hasError) {
          return Text("Error");
        }
        var _productList =
            snapshot.data.where((obj) => obj.flag == 1).toList();
        return GridView.builder(
          itemCount: _productList.length,
          gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
            crossAxisCount: 2,
          ),
          itemBuilder: (BuildContext contextd, int index) =>           
       SingleProduct(
            picture: _productList[index].productImage,
            price: _productList[index].salePrice,
            name: _productList[index].productName,
            rating: _productList[index].ratting,
          ),
        );
      } else
        return Center(
          child: CircularProgressIndicator(),
        );
     });
  }
  }

【问题讨论】:

  • 请将 JSON 作为文本而不是图像。此外,在问题中包含您的尝试(例如您如何解析和存储数据)。
  • 我可以发布 json pastebin 链接吗?而且我的尝试图片也可以,或者我必须输入代码?
  • 您需要将代码作为文本放入此处。此外,链接可能会在以后失效。
  • 完成。现在你可以找到代码和 json 了。
  • GetProduct 正在返回一个列表。在返回该列表之前,使用 .where 仅选择满足谓词的那些,对您来说是 flag==1

标签: arrays json flutter


【解决方案1】:

在使用列表之前执行此操作:

var _productList = snapshot.data.where((obj) => obj.flag==1).toList();

然后使用 _productList 构建 Ui。

【讨论】:

  • 谢谢vai,?尝试一下
猜你喜欢
  • 1970-01-01
  • 2012-02-12
  • 2018-05-05
  • 1970-01-01
  • 2020-03-25
  • 2019-09-08
  • 1970-01-01
  • 2021-12-20
  • 2019-10-08
相关资源
最近更新 更多