Как разобрать JSON 2D списка в флаттер - PullRequest
1 голос
/ 23 октября 2019

Я хочу проанализировать этот json

'supperset':[
  [1,2,3],
  [4,5,6],
  [1,8,9]
 ]

Я использую этот код при получении данных с сервера для его анализа

class Session {

final List<List<int>> supersets;
Session._({ this.supersets});
factory Session.fromJson(Map jsonMap) {

 return new Session._(

  supersets : (jsonMap['superSets'].cast<List<int>>()),

);
}
}

, но когда пользователь из этого кода получает эту ошибку

type 'List<dynamic>' is not a subtype of type 'List<int>' in type cast

как разобрать это правильно таким образом, но как получить эту ошибку

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

List.from() полезно при обработке списков, декодированных из JSON, имеющих идентичные типы элементов.

Объедините map с List.from, чтобы преобразовать ваш List<dynamic> в List<List<int>>, что, вероятно, то, что выхотел бы закончить.

void main() {
  var jsonMap = json.decode('{"superset":[[1,2,3],[4,5,6],[1,8,9]]}');

  // jsonMap['superset'] is a List<dynamic>, so lets 'map' it to a List<List<int>>
  // by mapping each of the top level elements to a List<int>
  // each 'l' is also a List<dynamic>, so convert that to a List<int> using .from
  var listOfLists =
      jsonMap['superset'].map<List<int>>((l) => List<int>.from(l)).toList();

  print(listOfLists); // expect [[1, 2, 3], [4, 5, 6], [1, 8, 9]]
  print(listOfLists.runtimeType); // expect List<List<int>>
}
0 голосов
/ 23 октября 2019

Задача 1

type 'List<dynamic>' is not a subtype of type 'List<int>' in type cast

Эта ошибка возникает из-за того, что вы создаете список целых чисел, но ВЫ знаете, что этосписок промежутков, а не список строк. Дарт не знает, какой тип списка собирается получить json.

Поэтому вы должны ожидать List<dynamic>, это означает, что список может иметь любую переменную. И затем вы используете его как целые числа.

Задача 2

У вас есть неправильный тип.

supersets : (jsonMap['superSets'].cast<List<int>>()),

должно быть

supersets : (jsonMap['supperset'].cast<List<int>>()),

Окончательный сценарий должен быть:

class Session {
  final List<List<dynamic>> supersets;
  Session._({this.supersets});
  factory Session.fromJson(Map jsonMap) {
    return new Session._(
      supersets: (jsonMap['supperset'].cast<List<dynamic>>()),
    );
  }
}

...