J'ai des problèmes lorsque j'essaie d'obtenir des valeurs doubles de JSON dans Flutter.
{ point: { title: "Point title", lat: 42.123456, lng: 32.26567 } }
Pour une raison quelconque, j'ai eu une erreur
Erreur Dart: exception non gérée: le type 'double' n'est pas un sous-type de tapez 'String'
J'ai essayé d'utiliser double.parse (json ["lng"])
à la place, mais j'ai eu la même erreur.
En même temps, cette façon d'obtenir des données à partir de JSON fonctionne bien avec d'autres types.
Ceci est un exemple JSON
class MapPoint { String title; double lat; double lng; MapPoint({this.title, this.lat, this.lng}); factory MapPoint.fromJson(Map<String, dynamic> json) { return MapPoint( title: json["title"] as String, lat: json["lat"] as double, lng: json["lng"] as double ); } }
3 Réponses :
Je ne peux pas reproduire
void main() { final json = { "point": {"title": "Point title", "lat": 42.123456, "lng": 32.26567} }; final p = MapPoint.fromJson(json); print(p); } class MapPoint { String title; double lat; double lng; MapPoint({this.title, this.lat, this.lng}); factory MapPoint.fromJson(Map<String, dynamic> json) { return MapPoint( title: json["title"] as String, lat: json["lat"] as double, lng: json["lng"] as double); } }
L'analyseur JSON de Dart convertit la propriété dans json et est apparemment assez intelligent pour cracher un double type.
someVariable as double
attend une chaîne sur le côté gauche.
Ce qui se passe probablement, c'est que vous essayez de convertir un double en un double.
J'essaierais quelque chose comme ceci:
lat: json["lat"].toDouble(),
Cela couvrirait le cas des données dans votre JSON est comme "5". Dans ce cas, le convertisseur dart json convertirait le type en int et casserait votre code si vous attendez toujours un double.
lat: double.parse (json ["lat"])
Si vous ne savez pas si le type est int ou double; mieux vaut le déclarer comme num
J'avais le même problème, comme je le pense:
class MapPoint { String title; double lat; double lng; MapPoint({this.title, this.lat, this.lng}); factory MapPoint.fromJson(Map<String, dynamic> json) { return MapPoint( title: json["title"] as String, lat: json["lat"] is int ? (json['lat'] as int).toDouble() : json['lat'], lng: json["lng"] is int ? (json['lng'] as int).toDouble() : json['lng'] ); } }
Quel JSON provoque cette erreur? Si vos valeurs sont placées entre guillemets, elles ne seront pas interprétées comme des doubles.
JSON est bien parce que je peux obtenir toutes les autres valeurs (chaîne et int) de celui-ci
Soit le JSON ne correspond pas à votre code, soit votre code ne correspond pas à votre JSON. Sans fournir le JSON à l'origine de l'erreur, vous pouvez également supprimer la question, car elle ne fournit tout simplement pas les informations requises pour diagnostiquer le problème.
J'ai ajouté un exemple de JSON. Une chose qui peut être inhabituelle est que les valeurs doubles ne sont pas présentées sous forme de chaînes.
Ce n'est pas du JSON valide. Dans JSON, les clés doivent être entre guillemets et un
,
manque après"Point title"
. Les valeurs doubles ne sont jamais représentées en tant queString
dans JSON.,
a été manqué dans l'exemple, désolé. Ce que j'entends par double commeString
dans JSON - peut être vu jsonplaceholder.typicode.com/ utilisateurs où les positions géographiques se trouvent dans les qoutesLes guillemets autour des clés sont toujours manquants.