当前位置: 首页 > 知识库问答 >
问题:

如何在itemBuilder中过滤JSON数据

吴鸿禧
2023-03-14

所以我有一个JSON url,里面有一些数据,比如名字、纬度和经度。然而,并不是每个对象都有经纬度,我只想显示具有经纬度的对象的名称。

带有lat和LNG的JSON示例对象:

    dynamicDataUrl: "http://example.com",
    staticDataUrl: "http://example.com",
    limitedAccess: false,
    locationForDisplay: {
        coordinatesType: "LA4556",
        latitude: 52.2490470982696,
        longitude: 6.16317987442017
    },
    identifier: "4556random2595",
    name: "Los Angelos"
    },
    dynamicDataUrl: 
"http://example.com",
    staticDataUrl: "https://example.com",
    limitedAccess: false,
    identifier: "1234randomi1233",
    name: "New York"
},
List data;
Future<String> theRequest() async {
    var response = await http.get(Uri.encodeFull(url),
    headers: {
      'Accept': 'application/json'
    });

    setState(() {

      var getRequestedData = jsonDecode(response.body);
      data = getRequestedData['parkingFacilities'];

    });
  }

  @override
  void initState() {
    this.theRequest();
  }

  @override
  Widget build(BuildContext context) {
    bool notNull = false;
    return new Scaffold(
      appBar: new AppBar(
        title: new Text('Parking Spots'),
      ),
      body: new ListView.builder(
        itemCount: data == null ? 0 : data.length,
        itemBuilder: (BuildContext context, i) {
          if( data[i]['locationForDisplay'] != null ) {
            return new ListTile(
              title:  new Text(data[i]['name']), 
              trailing: new Icon(
                saved ? Icons.favorite : Icons.favorite_border,
                color: saved ? Colors.red : null,
              ),
              onTap: (){_save(data[i]['name'], data[i]['locationForDisplay']['latitude'], data[i]['locationForDisplay']['longitude']);},
            );
          }
        },
      )
    );
  }

共有1个答案

苍兴怀
2023-03-14

您可以创建列表变量并筛选值,如下所示:

  List data;
  List<Map> filteredList;


  Future<String> theRequest() async {
      var response = await http.get(Uri.encodeFull(url),
      headers: {
        'Accept': 'application/json'
      });

      setState(() {

        var getRequestedData = jsonDecode(response.body);
        data = getRequestedData['parkingFacilities'];

        filteredList = List();
        for(item in data){
          if (item['locationForDisplay'] != null && item['locationForDisplay']['latitude'] != null && item['locationForDisplay']['longitude'] != null
          ) {
            filteredList.add(item);
          }
        }

      });
    }

    @override
    void initState() {
      this.theRequest();
    }

    @override
    Widget build(BuildContext context) {
      bool notNull = false;
      return new Scaffold(
        appBar: new AppBar(
          title: new Text('Parking Spots'),
        ),
        body: new ListView.builder(
          itemCount: filteredList == null ? 0 : filteredList.length,
          itemBuilder: (BuildContext context, i) {
              return new ListTile(
                title:  new Text(filteredList[i]['name']), 
                trailing: new Icon(
                  saved ? Icons.favorite : Icons.favorite_border,
                  color: saved ? Colors.red : null,
                ),
                onTap: (){_save(filteredList[i]['name'], filteredList[i]['locationForDisplay']['latitude'], filteredList[i]['locationForDisplay']['longitude']);},
              );

          },
        )
      );
    }
 类似资料:
  • 问题内容: 我花了很多时间为我的问题找到解决方案。 在此示例中,我在SetNavRecords数组中有2条记录。第一个是 “ Artikelnummer”:“ 21700” ,第二个是 “ Artikelnummer”:“ 21701” 每个记录都有一个数组“ OfflineVerkaufspreis”。 对我来说重要的是“ OfflineVerkaufspreis”中的“ Location_Co

  • 问题内容: 如何使用Javascript或jQuery过滤JSON数据? 这是我的JSON数据: JavaScript: 现在我只想要包含网站的名称和网站数据等于 “ yahoo” 问题答案: 这是您应该怎么做的方法:(适用于Google查找) 更好的 解决方案:(Salman’s) http://jsbin.com/yakubixi/4/edit

  • 问题内容: 基本上,我有一个名为的结构,主题包含,以及一个标志(有关说明,请参见下面的屏幕截图)。 在应用程序中,我想过滤数据,仅显示具有的主题。 这就是我想要做的: 但这是行不通的。我应该如何处理?在此先感谢您的帮助。 问题答案: 您那里有一些小错误。总体来说还算不错,但是结合起来它们将永远无法正常工作: 调用任何方法都将返回一个新对象 您需要先过滤其价值 您需要遍历结果 结合这些: 我们会定期

  • 问题内容: 如何过滤Java中的数组? 我有一系列对象,例如汽车: 类: 用: 现在我要过滤汽车阵列,只保留4门或更多: 我应该怎么做? 在使用Vector之前,请执行以下操作: 然后,我将使用Vector的大小创建一个新数组。然后,我将再次遍历向量并填充新数组。我知道这对于简单的事情来说是一个非常大的过程。 我正在使用J2ME。 问题答案: 编辑: 看到ArrayList不在J2ME中,但是基于

  • 我在java fx中有一个tableview,它显示不同类型的数据,如字符串和整数。我想有一个数据过滤器,这样它就可以自动在table View中显示数据。我怎样才能做到这一点呢?目前我正在使用一个函数,但它不起作用。注意:“pers”是我正在使用的类的一个对象

  • 我有一个如下的控制器, 我有另一个这样的控制器, 我的结果结构如下: 这扩展了结果类: 现在,我将要设置到结果字段中的模型是, 现在,对于上面提到的TestController,我想显示json响应中的所有字段,而在SecondTestController中,我想屏蔽(不显示)json响应中的age属性。在Spring我该如何实现这一点。非常感谢任何帮助!