从我的REST API中以
的形式接收JSON字符串{“总计”:“ 30”,“结果”:[ {“ ID”:“ 1809221034017”,“ DATE”:“ 2018-09-22”,“ REG”:“(E9)”,“ START”:“ 10:40”,“ END”:“ 10:48” }, {“ ID”:“ 1809221337250”,“ DATE”:“ 2018-09-22”,“ REG”:“(E4)”,“ START”:“ 13:43”,“ END”:“ 13:57” }, {“ ID”:“ 1809161032213”,“ DATE”:“ 2018-09-16”,“ REG”:“(E1)”,“ START”:“ 11:04”,“ END”:“ 11:13” }]}
total字段告诉我该数据库总共包含30条记录,结果部分包括了所请求的数据(仅3行)。
我需要解析数据,以便可以在ListView中显示结果。我设法用一个简单的JSON字符串来做到这一点,但没有解决这个复杂的JSON字符串。不幸的是,我无法更改Web服务的输出,因为它是由第三方托管的。
感谢任何帮助或代码示例。
预先感谢
答案 0 :(得分:0)
因此,在这里我们可以看到一个JSON对象具有两个值,一个JSON数组和一个总数。有时由于网络问题,互联网服务不会返回全部值,而仅返回一部分。 因此,现在在数组中,我们有了许多具有ID,DATE,REG,START,END的结果对象。 如果您格式化JSON,则可以轻松对其进行解码。
答案 1 :(得分:0)
我推荐这篇文章:https://medium.com/flutter-community/parsing-complex-json-in-flutter-747c46655f51
class Result
{
String id ;
String date;
String reg ;
String start;
String end ;
Result({this.date,this.end,this.id,this.reg,this.start});
factory Result.fromJson(Map<String, dynamic> parsedJson) {
return new Result(
id: parsedJson['ID'],
date: parsedJson['DATE'],
reg: parsedJson['REG'],
start: parsedJson['START'],
end: parsedJson['END'],
);
}
}
class Results
{
String total;
List<Result> results;
Results({this.results, this.total});
factory Results.fromJson(Map<String, dynamic> parsedJson) {
var list = parsedJson['results'][] as List;
return new Results(
total: parsedJson['total'],
results: list.map((i) => Result.fromJson(i)).toList());
}}
答案 2 :(得分:0)
首先阅读我的other answer here。
然后,我建议您使用quicktype之类的类生成库。
例如,使用快速类型,您可以使用JSON轻松,自动地在dart中生成moidel类。 Here the generated file。
quicktype --lang dart --all-properties-optional https://www.shadowsheep.it/so/53968769/testjson.php -o my_json_class.dart
然后在代码中使用它:
import 'my_json_class.dart';
import 'package:http/http.dart' as http;
var response = await http.get('https://www.shadowsheep.it/so/53968769/testjson.php');
var myClass = MyJsonClass.fromJson(jsonDecode(response.body));
for(var result in myClass.results.toList()) {
print(result?.id);
}
NB 如果您将掌握一个代码生成器库,那么您将能够解析来自REST API
的任何类型的JSON,您将有更多的时间玩乐