【发布时间】:2021-08-01 11:43:27
【问题描述】:
我在 Android Studio 中使用 FLutter,将多级 JSON 解析为一个类。尽管我检查了许多 stackoverflow 帖子,但我找不到解决此问题的方法。 这是我的 JSON
String myJson = '
[
{
"sensor":"1234",
"data":
[
{
"value":"40",
"reading_time1":"2021-04-10"
},
{
"value":"38",
"reading_time1":"2021-04-11"
}
]
},
{
"sensor":"1235",
"data":
[
{
"value":"2",
"reading_time1":"2021-04-23"
},
{
"value":"39",
"reading_time1":"2021-04-24"
}
]
}
] '
这些是我的类,使用 https://javiercbk.github.io/json_to_dart/ 生成。但是生成的代码不起作用(不是空安全)所以在阅读了很多帖子后我想出了这些:
class AllSensorData {
String sensor="";
List<Sensordata> sensordata = [];
AllSensorData({required this.sensor,required this.sensordata});
AllSensorData.fromJson(Map<String, dynamic> json) {
sensor = json['sensor'];
if (json['data'] != null) {
sensordata = <Sensordata>[];
json['data'].forEach((v) {
sensordata.add(new Sensordata.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['sensor'] = this.sensor;
if (this.sensordata != null) {
data['data'] = this.sensordata.map((v) => v.toJson()).toList();
}
return data;
}
}
class Sensordata {
String value;
String reading_time;
Sensordata({
required this.value,
required this.reading_time
});
Sensordata.fromJson(Map<String, dynamic> json) :
value = json['value'],
reading_time = json['reading_time1'];
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['value'] = this.value;
data['reading_time'] = this.reading_time;
return data;
}
}
现在当我跑步时:
var decodedJson = jsonDecode(myJson);
var jsonValue = AllSensorData.fromJson(decodedJson);
错误是:
type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'
虽然我怀疑可能还有更多。感谢您的帮助。
【问题讨论】:
-
decodedJson 实际上是一个 SensorData 列表,而不仅仅是一个。您正在尝试将列表传递给 AllSensorData.fromJson 而它接受地图而不是列表。因此错误。确保其中至少有一个元素后尝试 AllSensorData(decodedJson[0])。
标签: json flutter class parsing dart-null-safety