代码之家  ›  专栏  ›  技术社区  ›  mana

如何映射您的列表数据以接受来自jsonDecode的数据?

  •  0
  • mana  · 技术社区  · 3 年前

    我正在尝试映射一个变量,以便通过jsonDecode(response.body)从API接收数据

    以下是我绘制地图的方法,但我不知道这是否正确。 API的数据。

        {
        "days": {
            "region1": [
                {
                    "1": "2",
                    "2": "Monday",
                    "3": "25",
                    "4": "10"
                },
                {
                    "1": "1",
                    "2": "Tuesday",
                    "3": "21",
                    "4": "12"
                },
           ]
       }
    }
    

    我想要一个变量来接收上面的数据。

      final Map<String, dynamic> listData = jsonDecode(response.body);
    
        for (final item in listData.entries) {
             print(item.days);
         }
    

    如何打印 days ?或 region1 ?我如何获取价值 Monday 我试试这个 print(item.days) 但它不起作用。

    2 回复  |  直到 3 年前
        1
  •  1
  •   Renji Mathew    3 年前

    首先,要访问JSON数据中的“days”键,可以直接使用listData['days']。您不需要对这个特定案例的条目进行迭代。

    其次,“days”包含一个映射,其中键是类似“region1”的字符串,值是映射列表。您可以使用listData['days']['region1']访问“region1”数据。

    您可以参考以下内容:

    final Map<String, dynamic> responseData = jsonDecode(response.body);
    final Map<String, dynamic> daysData = responseData['days'];
    final List<dynamic> region1Data = daysData['region1'];
    
    for (final item in region1Data) {
      final String dayOfWeek = item['2'];
      final String value1 = item['1'];
      final String value3 = item['3'];
      final String value4 = item['4'];
    
      print('Day: $dayOfWeek, Value1: $value1, Value3: $value3, Value4: $value4');
    }
    
        2
  •  1
  •   Sujan Gainju    3 年前

    若要获取贴图属性,可以使用方括号内的特性名称。

    final test = {"fruit": "apple"}
    print(test['fruit');  => prints "apple"
    

    在您的代码中,您也可以这样做。

    示例:

    import "dart:convert";
    
    void main() {
      final data =    {
        "days": {
            "region1": [
                {
                    "1": "2",
                    "2": "Monday",
                    "3": "25",
                    "4": "10"
                },
                {
                    "1": "1",
                    "2": "Tuesday",
                    "3": "21",
                    "4": "12"
                },
           ]
       }
    };
      
      final Map<String, dynamic> listData = jsonDecode(jsonEncode(data));
      print("Listdata: $listData \n");
      print("Days: ${listData['days']} \n");
      
      final List<dynamic> region1 = listData['days']['region1'];
      
      for(final region in region1){
        print("Day: ${region['2']}");
      }
    }
    

    输出:

    Listdata: {days: {region1: [{1: 2, 2: Monday, 3: 25, 4: 10}, {1: 1, 2: Tuesday, 3: 21, 4: 12}]}} 
    
    Days: {region1: [{1: 2, 2: Monday, 3: 25, 4: 10}, {1: 1, 2: Tuesday, 3: 21, 4: 12}]} 
    
    Day: Monday
    Day: Tuesday
    

    但是,我建议您将地图转换为模型并访问属性。您可以将json数据转换为dart模型 HERE