Я пытаюсь найти способ десериализации пользовательской строки, разделенной запятыми, для объекта в 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;
}
К сожалению, результаты разбиения с массивом, который все еще не подходит для отображения:
В настоящее время цикл for дает следующую карту: