Flutter JSON无法正确读取 [英] Flutter JSON not reading correctly
问题描述
这可能需要一段时间...
我一直在尝试获取Dart / Flutter代码以从 BlockChainTicker (特别是我想从AUD行查看所有内容),并将其保留在调试控制台中。这样做时,我会从控制台获得此错误
this might take a while... I've been trying to get my Dart/Flutter code to return data from BlockChainTicker (Specifically I would like to see everything from the AUD line) and leave this in the Debug Console. When I do so, I get this error back from the Console
E/flutter ( 8656): [ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/flutter ( 8656): type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List' where
E/flutter ( 8656): _InternalLinkedHashMap is from dart:collection
E/flutter ( 8656): String is from dart:core
E/flutter ( 8656): List is from dart:core
我的代码似乎很成熟,但是我只有大约一周的使用这种语言的经验,所以感谢您的耐心等待
My code might seem amature but I only have about a weeks experience in this language, so thanks for any patience you might take in reading over this.
import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
class First extends StatefulWidget {
@override
HomePageState createState() => new HomePageState();
}
class HomePageState extends State<First> {
List data;
Future<String> getData() async {
var response = await http.get(
Uri.encodeFull("http://blockchain.info/ticker"),
headers: {
"Accept": "application/json"
}
);
data = JSON.decode(response.body);
print(data[1]["AUD"]);
return "Success!";
}
@override
Widget build(BuildContext context) {
return new Scaffold(
body: new Center(
child: new RaisedButton(
child: new Text("Get data"),
onPressed: getData,
),
),
);
}
}
推荐答案
json的顶层是一个地图(不是列表-在json中,列表用括号括起来)
The top level of your json is a map (not a list - in json, lists are enclosed in brackets)
{
"USD" : {"15m" : 7492.85, "last" : 7492.85, "buy" : 7492.85, "sell" : 7492.85, "symbol" : "$"},
"AUD" : {"15m" : 9899.28, "last" : 9899.28, "buy" : 9899.28, "sell" : 9899.28, "symbol" : "$"},
"BRL" : {"15m" : 28214.31, "last" : 28214.31, "buy" : 28214.31, "sell" : 28214.31, "symbol" : "R$"},
因此更改:
print(data[1]["AUD"]);
到
print(data["AUD"]); // prints the whole AUD map
print(data['AUD']['last']); // prints the AUD 'last' double
String isoCode = 'AUD';
print('$isoCode -> ${data[isoCode]}');
这篇关于Flutter JSON无法正确读取的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!