Флаттер: как декодировать эту сложную строку JSON - PullRequest
0 голосов
/ 29 декабря 2018

Из моего REST API строка JSON получена как

{"total": "30", "results": [{"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", "ДАТА ":" 2018-09-16 "," REG ":" (E1) "," START ":" 11:04 "," END ":" 11:13 "}]}

Поле total сообщает мне, что база данных содержит в общей сложности 30 записей, запрошенные данные (только 3 строки) включены в раздел результатов.

Мне нужно проанализировать данные, чтобы я мог показать результатыв ListView.Мне удалось сделать это с простой строкой JSON, но не с этой сложной строкой JSON.К сожалению, я не могу изменить выходные данные веб-службы, поскольку она поддерживается третьей стороной.

Любая помощь или пример кода приветствуются.

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 29 декабря 2018

Я рекомендую эту статью: 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());
            }}
0 голосов
/ 29 декабря 2018

Прочтите сначала мой другой ответ здесь .

Затем я предлагаю вам использовать библиотеку генерации классов, такую ​​как quicktype .

Использование быстрого типаНапример, вы можете легко и автоматически генерировать ваш класс moidel в dart, используя ваш JSON. Здесь сгенерированный файл .

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 Если вы овладеете библиотекой генератора кода, то сможете проанализировать любой тип JSON из REST API и у вас будет больше времени для развлечения.

0 голосов
/ 29 декабря 2018

Your JSON in proper format Итак, здесь мы видим, что существует объект JSON, имеющий два значения: массив JSON и общее число. Иногда интернет-службы не возвращают полное значение, а только часть из-за проблем с сетью.Итак, теперь в массиве у нас есть количество объектов результатов с ID, DATE, REG, START, END.Если вы отформатируете JSON, вы легко его расшифруете.

...