Преобразование / десериализация строки через запятую в объект в Dart - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь найти способ десериализации пользовательской строки, разделенной запятыми, для объекта в Dart.

Ответ от недокументированного API похож на следующий:

["Godzilla II: Król potworów","Godzilla: King of the Monsters",0,0,"Akcja,Sci-Fi",2019,132,0,"https://www.filmweb.pl/film/Godzilla+II%3A+Kr%C3%B3l+potwor%C3%B3w-2019-720753/discussion",0,1,"/07/53/720753/7873671.2.jpg",["https://1.fwcdn.pl/wv/98/94/49894/thumbnail.49894.1.jpg","https://mm.filmweb.pl/720753/godzilla_ii_krol_potworow___oficjalny_zwiastun__3_pl.iphone.mp4"],"2019-05-29","2019-06-14",0,0,0,"USA","Po pojawieniu się nowego zagrożenia Król Potworów powraca, by ponownie przywrócić w przyrodzie równowagę."]  t:43200

Как вы можетесм. базовая структура объекта находится внутри [ и ], и появляется один вложенный объект.В этой строке нет ключей, поэтому базовая десериализация json невозможна.На данный момент все значения могут считаться строками, но целые и двойные не заключены в кавычки.

В настоящее время мой подход заключается в следующем:

Map<String, dynamic> extractResult(String response) {
    if (response.startsWith('err')) {
      throw new Error();
    }
    final map = Map<String, dynamic>();
    final film = Film();
    final lastTColon = response.lastIndexOf('t:');
    final content = response
        .substring(0, lastTColon > 0 ? lastTColon : null)
        .replaceAll('[', '')
        .replaceAll(']', '')
        .split(',');
    for (var i = 0; i < content.length; i++) {
      map[film.keys[i]] = content[i];
    }

    return map; //this I would like to convert to Film()
}

Я подготовил простой класс, что эта строкаможет быть преобразовано в.

class Film {
  List<String> keys = [
    'title',
    'originalTitle',
    'rating',
    'ratingCount',
    'category',
    'year',
    'duration',
    'year',
    'something',
    'discussionUrl',
    'something2',
    'something3',
    'poster',
    'trailerInfo',
    'worldPremiere',
    'polishPremiere',
    'something4',
    'something5',
    'something6',
    'country',
    'description'
  ];
  String title;
  String originalTitle;
  double rating;
  int ratingCount;
  String category;
  int year;
  int duration;
  int something;
  String discussionUrl;
  int something2;
  int something3;
  String poster;
  TrailerInfo trailerInfo;
  String worldPremiere;
  String polishPremiere;
  int something4;
  int something5;
  int something6;
  String country;
  String description;
}

class TrailerInfo {
  String posterUrl;
  String movieUrl;
}

К сожалению, результаты разбиения с массивом, который все еще не подходит для отображения:

Splitted content

В настоящее время цикл for дает следующую карту:

Resulting map

1 Ответ

1 голос
/ 16 июня 2019

Вы можете попробовать прочитать его как обычный объект массива json.

...