根據這個手冊這樣做了 https://www.bezkoder.com/dart-flutter-parse-json-string-array-to-object-list/ Dart/Flutter將JSON物件的陣列決議為List
來自服務器的JSON資料
{"myChannels":[{"id":"2","name":"channel2test","imageUrl":"image1.png"},{"id":"2","name":"channel2test","imageUrl":"image2.png"}]}模型類
class ChannelModel {
String channelID。
String channelName;
String imageUrl。
ChannelModel(this.channelID, this.channelName, this.imageUrl) 。
factory ChannelModel.parsingChannels(dynamic json) {
return ChannelModel(json['channelID'] as String,
json['channelName'] 作為 String。json['imageUrl'] as String)。)
}
@override; }
String toString() {
return '{ ${this. channelID}, ${this.channelName}, ${this.imageUrl} }'/span>;
}
主塊
try {
final response = await http.post(
url,
body: json.encode({
'action': 'getMyChannels',
'userID': userID,
'returnSecureToken': true。
}),
);
// print(jsonDecode(response.body));
var extractedData =
jsonDecode(response.body)['myChannels'] as List<dynamic> 。
List<ChannelModel> channelObjects = extractedData
.map((cJson) => ChannelModel.parsingChannels(cJson))
.toList()。
print(channelObjects)。
channelObjects.forEach((Data) {
print('test')。
});
結果如下...
print(channelObjects) > outputs > [] 。
print('test') > not working , channelObjects not looping
uj5u.com熱心網友回復:
我建議將你的回應序列化為dart類。這將會更容易訪問你想要的資料。
class ApiResponse {
ApiResponse({
required this.myChannels,
});
List<MyChannel> myChannels;
factory ApiResponse.fromJson(Map<String, dynamic> json) => ApiResponse(
myChannels: List<MyChannel> .from(
json["myChannels"].map((x) => MyChannel.fromJson(x))。
),
);
}
class MyChannel{
MyChannel({
required this.id。
required this.name。
required this.imageUrl,
});
String id;
String name;
String imageUrl;
factory MyChannel.fromJson(Map<String, dynamic> json) => MyChannel(
id: json["id"]。
name: json["name"]。
imageUrl: json["imageUrl"]。
);
}
然后你可以這樣使用它 :
final extractedData = ApiResponse.fromJson(json.decode(response. body) as Map<String, dynamic>)。)
然后訪問你想要的資料
extractedData.myChannels[0] .id
extractedData.myChannels[0].name
extractedData.myChannels[0].imageUrl
for (var ch in extractedData.myChannels){
print(ch.id)。
print(ch.name);
print(ch.imageUrl);
}
uj5u.com熱心網友回復:
part 'example.g.dart';
@JsonSerializable()
class Channel{
final String id;
final String name;
final String? imageUrl;
Channel({required this.id, required this.name, this.imageUrl}) 。
factory Channel.fromJson(Map<String, dynamic> json) => _$ChannelFromJson(json) 。
Map<String, dynamic> toJson() => _$ChannelToJson(this) 。
}
@JsonSerializable()
class ChannelList{
final List< Channel> myChannels;
ChannelList({required this.myChannels})。)
factory ChannelList. fromJson(Map<String, dynamic> json) => _$ChannelListFromJson(json) 。
Map<String, dynamic> toJson() => _$ChannelListToJson(this) 。
}
最后 extractedData = ChannelList.fromJson(json.decode(response.body));
https://pub.dev/packages/json_serializable
使用JsonSerializable更有用,更容易理解。你可以閱讀該軟體包的檔案
。轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/329429.html
標籤:
上一篇:用MockMvc、test-context.xml和基于注解的WebAppConfig測驗Spring5MVC(即在Java中)。
