Je travaille sur json en flutter flutter.
> symbols_returned,147
>I/flutter ( 4575): base,USD
>I/flutter ( 4575):
> data,{AED: 3.673050, AFN: 74.450000, ALL: 110.130000, AMD: 489.850000,
> ANG: 1.795100, AOA: 313.147500, ARS: 38.223700, AUD: 1.415500, AWG:
> 1.794500, AZN: 1.705000, BAM: 1.728800, BBD: 2.001800, BCH: 0.008256, BDT: 83.907000, BGN: 1.735350, BHD: 0.377050, BIF: 1830.000000, BMD:
> 1.000000, BND: 1.350750, BOB: 6.913550, BRL: 3.764500, BSD: 1.000100, BTC: 0.000278, BWP: 10.505000, BZD: 2.010200, CAD: 1.330845, CDF:
> 1630.000000, CHF: 1.004050, CLF: 0.025048, CLP: 662.775000, CNY: 6.792400, COP: 3134.400000, CRC: 611.915000, CUP: 1.000550, CVE: 97.511500, CZK: 22.949000, DJF: 177.720000, DKK: 6.618750, DOP: 50.580000, DZD: 118.915000, EGP: 17.586000, ETB: 28.600000, ETH: 0.008363, EUR: 0.886920, FJD: 2.134350, GBP: 0.777245, GEL: 2.645000, GHS: 5.225000, GIP: 0.769990, GMD: 49.545000, GNF: 9220.000000, GTQ:
> 7.755600, GYD: 209.510000, HKD: 7.847850, HNL: 24.500000, HRK: 6.569900, HTG: 82.551000, HUF: 283.885000, IDR: 14100.500000, ILS: 3.645750, INR: 71.165000, IQD: 1190.000000, IRR: 42105.000000 } }
Le premier est une chaîne, tandis que le second est un objet Map. Ma question est
1. comment parcourir et accéder à chaque devise dans Dart:
par exemple. var currencyValue = stringJson ['AED']
Ce qui suit est ce que j'ai essayé
StringJson et mapJson sont renvoyés par la future méthode jsonTest ().
var stringJson = jsonOperation ()
stringJson.then((onValue){
if(onValue != null){
onValue.forEach((k,v){
print(onValue['AED'])
print('$k,$v');
});
}
});
Le code ci-dessus renvoie: print (onValue ['AED']) imprimé nul tandis que print ('$ k, $ v'); imprimé ce qui suit:
final response = http.get('url').
response.body returns this json String format: String stringJson = {"symbols_returned":147,"base":"USD","data":{"AED":"3.672940","AFN":"75.617000","ALL":"109.780000","AMD":"490.740000","ANG":"1.797350","AOA":"313.147500","ARS":"37.864500","AUD":"1.408450","AWG":"1.800000","AZN":"1.702500","BAM":"1.727050","BBD":"2.004250","BCH":"0.008196","BDT":"83.950500","BGN":"1.726900","BHD":"0.377470","BIF":"1800.000000","BMD":"1.000000","BND":"1.357650","BOB":"6.919100","BRL":"3.729400","BSD":"1.001300","BTC":"0.000278","BWP":"10.474000","BZD":"2.018350","CAD":"1.328050","CDF":"1631.000000","CHF":"1.000300","CLF":"0.025048","CLP":"658.100000","CNY":"6.746600","COP":"3121.850000","CRC":"612.970000","CUP":"1.001395","CVE":"97.373000","CZK":"22.793600","DJF":"177.720000","DKK":"6.589100","DOP":"50.646500","DZD":"118.840000","EGP":"17.609500","ETB":"28.413000","ETH":"0.008377","EUR":"0.883085","FJD":"2.125900","GBP":"0.773115","GEL":"2.645000","GHS":"5.276200","GIP":"0.770005","GMD":"49.550000","GNF":"9127.200000","GTQ":"7.765200","GYD":"209.360000","HKD":"7.846950","HNL":"24.439500"}
}
Map mapJson = json.decode(response.body) returns the following format:
{symbols_returned: 147, base: USD, data: {AED: 3.672940, AFN: 75.617000, ALL: 109.780000, AMD: 490.740000, ANG: 1.797350, AOA: 313.147500, ARS: 37.864500, AUD: 1.408450, AWG: 1.800000, AZN: 1.702500, BAM: 1.727050, BBD: 2.004250, BCH: 0.008196, BDT: 83.950500, BGN: 1.726900, BHD: 0.377470, BIF: 1800.000000, BMD: 1.000000, BND: 1.357650, BOB: 6.919100, BRL: 3.729400, BSD: 1.001300, BTC: 0.000278, BWP: 10.474000, BZD: 2.018350, CAD: 1.328050, CDF: 1631.000000, CHF: 1.000300, CLF: 0.025048, CLP: 658.100000, CNY: 6.746600, COP: 3121.850000, CRC: 612.970000, CUP: 1.001395, CVE: 97.373000, CZK: 22.793600, DJF: 177.720000, DKK: 6.589100, DOP: 50.646500, DZD: 118.840000, EGP: 17.609500, ETB: 28.413000, ETH: 0.008377, EUR: 0.883085, FJD: 2.125900, GBP: 0.773115, GEL: 2.645000, GHS: 5.276200, GIP: 0.770005, GMD: 49.550000, GNF: 9127.200000, GTQ: 7.765200, GYD: 209.360000, HKD: 7.846950, HNL: 24.439500, HRK: 6.537500, HTG: 82.810000, HUF: 281.363000, IDR: 14042.950000, ILS: 3.640660, INR: 71.165000, IQD: 1194.800000}}
Au lieu d'imprimer chaque devise au format clé / valeur. Le problème est que je ne peux pas accéder à chaque valeur de devise. Toute aide serait appréciée.
3 Réponses :
Je pense que vous itérez en fait l'objet parent, qui a une propriété data qui contient les valeurs. Vous devez itérer la propriété data.
Pour obtenir les valeurs, vous pouvez simplement utiliser:
stringJson.then((onValue){
if(onValue != null){
onValue.data.forEach((k,v){ // add .data here
print(onValue['AED'])
print('$k,$v');
});
}
});
Merci pour la réponse. L'éditeur IDE se plaint que onValue n'a pas de «données» comme méthode. L'expression d'erreur exacte est: "Les données getter ne sont pas définies pour la classe Map". veuillez noter que la méthode stringJson renvoie un objet Map. Encore merci
data n'est pas un champ, ni une clé dans la carte. onValue ['data'] vous rapprocherait.
J'ai finalement pu accéder à chaque devise au format paire clé-valeur. puisque le format de la carte json est comme indiqué ci-dessous:
stringJson().then((onValue){
onValue['data'].forEach((k,v){
//the following access AUD currency value
print(onValue['data']['AUD']);
//the following print all the currency in
key-value format
print('$k,$v');
});
j'ai utilisé print (onValue ['data'] ['AED']) qui renvoie 3.672940. où data (entre crochets) est le nom de la collection json et AED (également entre crochets) est la devise spécifique dont j'ai l'intention d'accéder.
Pour parcourir la carte json, utilisez le code suivant:
{symbols_returned: 147, base: USD, data: {AED: 3.672940, AFN: 75.617000, ALL: 109.780000, AMD: 490.740000, ANG: 1.797350, AOA: 313.147500, ARS: 37.864500, AUD: 1.408450, AWG: 1.800000, AZN: 1.702500, BAM: 1.727050, BBD: 2.004250, BCH: 0.008196, BDT: 83.950500, BGN: 1.726900, BHD: 0.377470, BIF: 1800.000000, BMD: 1.000000, BND: 1.357650, BOB: 6.919100, BRL: 3.729400, BSD: 1.001300, BTC: 0.000278, BWP: 10.474000, BZD: 2.018350, CAD: 1.328050, CDF: 1631.000000, CHF: 1.000300, CLF: 0.025048, CLP: 658.100000, CNY: 6.746600, COP: 3121.850000, CRC: 612.970000, CUP: 1.001395, CVE: 97.373000, CZK: 22.793600, DJF: 177.720000, DKK: 6.589100, DOP: 50.646500, DZD: 118.840000, EGP: 17.609500, ETB: 28.413000, ETH: 0.008377, EUR: 0.883085, FJD: 2.125900, GBP: 0.773115, GEL: 2.645000, GHS: 5.276200, GIP: 0.770005, GMD: 49.550000, GNF: 9127.200000, GTQ: 7.765200, GYD: 209.360000, HKD: 7.846950, HNL: 24.439500, HRK: 6.537500, HTG: 82.810000, HUF: 281.363000, IDR: 14042.950000, ILS: 3.640660, INR: 71.165000, IQD: 1194.800000}}
J'espère que cela aidera quelqu'un.
Convertissez la valeur décodée en Carte , puis vous pouvez accéder à la touche 'data' et la convertir également en Carte . Vous pouvez ensuite parcourir les clés de cette carte.
Future<void> printCurrencies() async {
final response = await http.get('url');
final decoded = jsonDecode(response) as Map;
final data = decoded['data'] as Map;
print(data['AED']); // prints 3.672940
for (final name in data.keys) {
final value = data[name];
print('$name,$value'); // prints entries like "AED,3.672940"
}
}
Notez que si vous voulez avoir une carte entièrement saisie, vous ne pouvez pas utiliser comme carte car à l'exécution, le type réifié est Map . Au lieu de cela, vous devrez utiliser la méthode cast . (decoded ['data'] as Map) .cast
Cela a fonctionné, je ne sais pas pourquoi il n'a pas accepté votre réponse. Merci Nate.