Flutter:如何解码此复杂的JSON字符串

时间:2018-12-29 10:39:02

标签: json flutter decode

从我的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服务的输出,因为它是由第三方托管的。

感谢任何帮助或代码示例。

预先感谢

3 个答案:

答案 0 :(得分:0)

Your JSON in proper format 因此,在这里我们可以看到一个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);
    }

enter image description here

NB 如果您将掌握一个代码生成器库,那么您将能够解析来自REST API的任何类型的JSON,您将有更多的时间玩乐

相关问题