Reputation: 427
I have this complex (to me) json object, that I'd like to convert to a dart model, but I keep getting one error or the other.
It's a list of json objects like this:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"name": "Congo",
"pop_est": 4012809,
"gdp_md_est": 15350,
"economy": "6. Developing region",
"income_grp": "4. Lower middle income",
"iso_a2": "CG",
"iso_a3": "COG",
"continent": "Africa",
"latitude": "-4.2634",
"longitude": "15.2832",
"confirmed": 143,
"deaths": 6,
"active": 126,
"recovered": 11
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
12.995517205465177,
-4.781103203961884
],
[
12.620759718484491,
-4.438023369976136
],
[
12.318607618873926,
-4.606230157086188
],
[
11.91496300624209,
-5.037986748884791
],
[
11.093772820691925,
-3.978826592630547
],
[
11.855121697648114,
-3.426870619321051
],
[
11.478038771214303,
-2.765618991714241
],
[
11.820963575903193,
-2.514161472181982
],
[
12.495702752338161,
-2.391688327650243
],
[
12.575284458067642,
-1.948511244315135
],
[
13.109618767965628,
-2.428740329603514
],
[
13.99240726080771,
-2.4708049454891
],
[
14.299210239324564,
-1.998275648612214
],
[
14.425455763413593,
-1.333406670744971
],
[
14.316418491277743,
-0.552627455247048
],
[
13.843320753645655,
0.038757635901149
],
[
14.276265903386957,
1.196929836426619
],
[
14.026668735417218,
1.395677395021153
],
[
13.282631463278818,
1.31418366129688
],
[
13.003113641012078,
1.83089630778332
],
[
13.075822381246752,
2.267097072759015
],
[
14.33781253424658,
2.227874660649491
],
[
15.146341993885244,
1.964014797367184
],
[
15.940918816805064,
1.727672634280295
],
[
16.012852410555354,
2.267639675298085
],
[
16.537058139724135,
3.198254706226279
],
[
17.133042433346304,
3.728196519379452
],
[
17.809900343505262,
3.56019643799857
],
[
18.45306521980993,
3.504385891123349
],
[
18.39379235197114,
2.90044342692822
],
[
18.094275750407434,
2.365721543788055
],
[
17.898835483479587,
1.741831976728278
],
[
17.774191928791566,
0.855658677571085
],
[
17.826540154703252,
0.288923244626105
],
[
17.66355268725468,
-0.058083998213817
],
[
17.638644646889986,
-0.424831638189247
],
[
17.523716261472856,
-0.743830254726987
],
[
16.865306837642123,
-1.225816338713287
],
[
16.407091912510054,
-1.740927015798682
],
[
15.972803175529151,
-2.712392266453612
],
[
16.0062895036543,
-3.535132744972529
],
[
15.75354007331475,
-3.855164890156096
],
[
15.170991652088444,
-4.343507175314301
],
[
14.58260379401318,
-4.97023894615014
],
[
14.209034864975223,
-4.793092136253598
],
[
14.144956088933299,
-4.510008640158715
],
[
13.600234816144678,
-4.50013844159097
],
[
13.258240187237048,
-4.882957452009165
],
[
12.995517205465177,
-4.781103203961884
]
]
]
}
},
{
"type": "Feature",
"properties": {
"name": "Angola",
"pop_est": 12799293,
"gdp_md_est": 110300,
"economy": "7. Least developed region",
"income_grp": "3. Upper middle income",
"iso_a2": "AO",
"iso_a3": "AGO",
"continent": "Africa",
"latitude": "-11.2027",
"longitude": "17.8739",
"confirmed": 24,
"deaths": 2,
"active": 16,
"recovered": 6
},
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[
16.326528354567046,
-5.877470391466218
],
[
16.57317996589614,
-6.622644545115094
],
[
16.86019087084523,
-7.222297865429979
],
[
17.08999596524717,
-7.545688978712476
],
[
17.472970004962292,
-8.068551120641656
],
[
18.13422163256905,
-7.987677504104866
],
[
18.464175652752687,
-7.847014255406477
],
[
19.01675174324967,
-7.98824594486014
],
[
19.166613396896082,
-7.738183688999725
],
[
19.417502475673217,
-7.155428562044278
],
[
20.037723016040218,
-7.11636117923166
],
[
20.09162153492062,
-6.943090101756951
],
[
20.601822950938327,
-6.939317722199689
],
[
20.51474816252653,
-7.299605808138665
],
[
21.728110792739756,
-7.290872491081316
],
[
21.746455926203367,
-7.920084730667114
],
[
21.94913089365204,
-8.305900974158305
],
[
21.801801385187957,
-8.908706556842986
],
[
21.875181919042404,
-9.523707777548566
],
[
22.208753289486424,
-9.89479623783653
],
[
22.155268182064333,
-11.084801120653779
],
[
22.402798292742432,
-10.99307545333569
],
[
22.83734541188477,
-11.017621758674338
],
[
23.456790805767465,
-10.867863457892483
],
[
23.912215203555746,
-10.926826267137542
],
[
24.017893507592614,
-11.237298272347118
],
[
23.90415368011824,
-11.722281589406336
],
[
24.079905226342902,
-12.191296888887308
],
[
23.930922072045377,
-12.565847670138822
],
[
24.016136508894704,
-12.911046237848552
],
[
21.933886346125945,
-12.898437188369357
],
[
21.887842644953878,
-16.080310153876894
],
[
22.56247846852429,
-16.898451429921835
],
[
23.215048455506093,
-17.523116143465952
],
[
21.377176141045595,
-17.93063648851971
],
[
18.95618696460363,
-17.789094740472237
],
[
18.26330936043422,
-17.309950860262006
],
[
14.209706658595051,
-17.353100681225712
],
[
14.058501417709039,
-17.423380629142656
],
[
13.462362094789967,
-16.97121184658874
],
[
12.814081251688407,
-16.941342868724078
],
[
12.215461460019384,
-17.111668389558062
],
[
11.734198846085148,
-17.3018893368245
],
[
11.64009606288161,
-16.67314218512921
],
[
11.778537224991567,
-15.79381601325069
],
[
12.123580763404448,
-14.878316338767931
],
[
12.175618930722266,
-14.449143568583892
],
[
12.500095249083017,
-13.547699883684402
],
[
12.738478631245442,
-13.137905775609935
],
[
13.312913852601838,
-12.483630466362513
],
[
13.633721144269828,
-12.038644707897191
],
[
13.738727654686926,
-11.297863050993143
],
[
13.686379428775297,
-10.731075941615842
],
[
13.38732791510216,
-10.373578383020728
],
[
13.120987583069875,
-9.766897067914115
],
[
12.875369500386569,
-9.166933689005488
],
[
12.929061313537801,
-8.959091078327575
],
[
13.236432732809874,
-8.562629489784342
],
[
12.933040398824316,
-7.596538588087753
],
[
12.72829837408392,
-6.927122084178805
],
[
12.227347039446443,
-6.294447523629372
],
[
12.322431674863566,
-6.100092461779653
],
[
12.735171339578699,
-5.965682061388478
],
[
13.02486941900699,
-5.984388929878108
],
[
13.375597364971895,
-5.864241224799557
],
[
16.326528354567046,
-5.877470391466218
]
]
],
[
[
[
12.436688266660923,
-5.684303887559224
],
[
12.18233686692028,
-5.789930515163803
],
[
11.914963006242116,
-5.037986748884734
],
[
12.318607618873926,
-4.606230157086158
],
[
12.62075971848455,
-4.438023369976121
],
[
12.995517205465205,
-4.781103203961919
],
[
12.631611769265845,
-4.991271254092936
],
[
12.468004184629763,
-5.248361504744992
],
[
12.436688266660923,
-5.684303887559224
]
]
]
]
}
}
] //Missing bracket
}
But I only need this part:
"properties": {
"name": "Angola",
"pop_est": 12799293,
"gdp_md_est": 110300,
"economy": "7. Least developed region",
"income_grp": "3. Upper middle income",
"iso_a2": "AO",
"iso_a3": "AGO",
"continent": "Africa",
"latitude": "-11.2027",
"longitude": "17.8739",
"confirmed": 24,
"deaths": 2,
"active": 16,
"recovered": 6
},
I tried creating a model just for the part I need above like so:
class AfricaData {
Properties properties;
AfricaData({this.properties});
AfricaData.fromJson(Map<String, dynamic> json) {
properties = json['properties'] != null
? new Properties.fromJson(json['properties'])
: null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.properties != null) {
data['properties'] = this.properties.toJson();
}
return data;
}
}
class Properties {
String name;
int popEst;
int gdpMdEst;
String economy;
String incomeGrp;
String isoA2;
String isoA3;
String continent;
String latitude;
String longitude;
int confirmed;
int deaths;
int active;
int recovered;
Properties(
{this.name,
this.popEst,
this.gdpMdEst,
this.economy,
this.incomeGrp,
this.isoA2,
this.isoA3,
this.continent,
this.latitude,
this.longitude,
this.confirmed,
this.deaths,
this.active,
this.recovered});
Properties.fromJson(Map<String, dynamic> json) {
name = json['name'];
popEst = json['pop_est'];
gdpMdEst = json['gdp_md_est'];
economy = json['economy'];
incomeGrp = json['income_grp'];
isoA2 = json['iso_a2'];
isoA3 = json['iso_a3'];
continent = json['continent'];
latitude = json['latitude'];
longitude = json['longitude'];
confirmed = json['confirmed'];
deaths = json['deaths'];
active = json['active'];
recovered = json['recovered'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['name'] = this.name;
data['pop_est'] = this.popEst;
data['gdp_md_est'] = this.gdpMdEst;
data['economy'] = this.economy;
data['income_grp'] = this.incomeGrp;
data['iso_a2'] = this.isoA2;
data['iso_a3'] = this.isoA3;
data['continent'] = this.continent;
data['latitude'] = this.latitude;
data['longitude'] = this.longitude;
data['confirmed'] = this.confirmed;
data['deaths'] = this.deaths;
data['active'] = this.active;
data['recovered'] = this.recovered;
return data;
}
}
So far I've tried the following:
1)
var data = json.decode(response.body);
var dataModel = (data[1]['features'][0]['properties'] as List).map((f) => AfricaData.fromJson(f)).toList();
2)
Map<String, dynamic> data = json.decode(response.body);
var dataModel = (data['type']['features']['type']['properties'] as List).map((f) => AfricaData.fromJson(f)).toList();
But I keep getting different errors, particularly InternalLinkedHashMap' is not a subtype of type 'List' in type cast
Upvotes: 0
Views: 106
Reputation: 2225
To help you, you can use converters from json to Dart such as
You just have to past your json and copy the result of dart objects generated for you.
Once it's done, you can get your properties values as a List like this :
var obj = MyObject.fromJson(json.decode(str));
print(obj.features[0].properties.toJson().values.toList());
Upvotes: 1