将 JSON 解析为 Flutter 中的 Map

edi*_*233 9 dart flutter

我从后端得到回应:

   {"measurements": {
            "pm10": {
              "name": "pm10",
              "value": 20.8647,
              "unit": "µg/m³"
            },
             "pm25": {
              "name": "pm10",
              "value": 20.8647,
              "unit": "µg/m³"
            },
             "o2": {
              "name": "pm10",
              "value": 20.8647,
              "unit": "µg/m³"
            }

        },
   "station": {
        "city": "{cityName}",
        "name": "{locationName}",
        "latitude": "54.353336",
        "longitude": "18.635283"
    }
    }
Run Code Online (Sandbox Code Playgroud)

这就是我此刻得到的:

class Pollutions {

    Pollutions.fromJsonMap(Map<String, dynamic> map):
                measurements = Measurements.fromJsonMap(map["measurements"]),
                station = Station.fromJson(map["station"]);

  Map<String, Pollution> measurements;
  Station station;

    Map<String, dynamic> toJson() {
        final data = Map<String, dynamic>();
        data['measurements'] = measurements == null ? null : measurements.jsonDecode(measurements);
        data['station'] = station == null ? null : station.toJson();
        return data;
    }
}
Run Code Online (Sandbox Code Playgroud)

在测量中,我可以获得其他值,但我对它们的名称一无所知,可能是 o2、o3,不仅是 pm10 等。我可以解析此测量值以映射键值,其中键将是 pm10,例如那:地图?地图的外观Pollutions.fromJsonMaptoJson方法应该如何?

小智 11

上面的答案可能会给出错误内部链接哈希图不是 Map 的子类型。

试试这个:

Map<String, String> map = Map.castFrom(json.decode(jsonString))
Run Code Online (Sandbox Code Playgroud)

  • 这个小窍门非常有帮助! (2认同)

Mig*_*ivo 10

您可以简单地通过使用开箱即用的解码器来做到这一点dart:convert

import 'package:http/http.dart' as http;
import 'dart:convert';

final response = await http.get(someEndPoint);
final Map<String, dynamic> data = json.decode(response.body);
Run Code Online (Sandbox Code Playgroud)


Mur*_*lan 6

Map<String, dynamic> data = jsonDecode(yourVariable);
Run Code Online (Sandbox Code Playgroud)